在片段中找到ViewById
我试图在片段中创建一个ImageView,它将引用我在片段的XML中创建的ImageView元素。 但是, findViewById
方法只适用于扩展Activity类的情况。 无论如何,我还可以在片段中使用它?
public class TestClass extends Fragment {
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
ImageView imageView = (ImageView)findViewById(R.id.my_image);
return inflater.inflate(R.layout.testclassfragment, container, false);
}
}
findViewById
方法有一个错误,它指出该方法未定义。
使用getView()或View参数来实现onViewCreated
方法。 它返回片段的根视图(由onCreateView()
方法返回的视图) 。 有了这个,你可以调用findViewById()
。
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
ImageView imageView = (ImageView) getView().findViewById(R.id.foo);
// or (ImageView) view.findViewById(R.id.foo);
由于getView()
仅在onCreateView()
之后起作用, 因此不能在片段的onCreate()
或onCreateView()
方法中使用它 。
你需要膨胀Fragment的视图并在它返回的View
上调用findViewById()
。
public View onCreateView(LayoutInflater inflater,
ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.testclassfragment, container, false);
ImageView imageView = (ImageView) view.findViewById(R.id.my_image);
return view;
}
在Fragment
类中,您将获得onViewCreated()重写方法,您应该始终初始化视图,因为在此方法中,您可以使用视图对象来查找您的视图,如下所示:
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
view.findViewById(R.id.yourId).setOnClickListener(this);
// or
getActivity().findViewById(R.id.yourId).setOnClickListener(this);
}
永远记住在片段的情况下onViewCreated()
方法不会叫,如果自动您返回null或super.onCreateView()
从onCreateView()
方法。 它将在默认情况下在ListFragment
ListFragment
返回FrameLayout
的情况下被调用。
注意:一旦onCreateView()
成功执行,您就可以通过使用getView()
来获取片段视图。 即
getView().findViewById("your view id");
链接地址: http://www.djcxy.com/p/23143.html