在片段中找到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

上一篇: findViewById in Fragment

下一篇: onActivityResult is not being called in Fragment