片段视图 属性 稍后调用时为空

Fragment view property is null when called later

我有一个带有 viewPager 的 FirstFragment(ViewPager 包含几个 TestFragment)。 FirstFragment 还包含一个按钮。我想在单击按钮时更改当前 TestFragment 的 UI。

不幸的是,当我调用 getView() 或尝试访问存储的 属性(查看 rootView)时。他们都 return null.

我该如何处理?

class FirstFragment extends Fragment{
    private ViewPager mViewPager;
    private TestAdapter testAdapter;
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.first_layout, container, false);
        testAdapter = new TestAdapter(getFragmentManager());
        mViewPager = (ViewPager) view.findViewById(R.id.pager);
        mViewPager.setAdapter(testAdapter);

        mViewPager.setAdapter(questionPagerAdapter);
        view.findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                ((TestFragment)testAdapter.getItem(mViewPager.getCurrentItem())).doSomethingOnFragmentUI();
            }
        });
        return view;
    }
}


class TestFragment extends Fragment{
    private View rootView;
    @Override
    public View onCreateView(LayoutInflater inflater,
                             ViewGroup container, Bundle savedInstanceState) {
        rootView = inflater.inflate(R.layout.my_layout, container, false);
        return rootView;
    }
    public void doSomethingOnFragmentUI(){
        if(rootView != null){
            //rootView is always null at this point
        }
    }
}

请注意,viewPager 会在每次调用 .getItem() 时创建一个新片段。我不缓存片段。当我停止 "caching" HashMap 中的片段(FirstFragment 保留引用)时出现此问题。

这样您就可以解决问题:

  1. 在 Fragments 中使用 Fragments 时需要调用 getChildFragmentManager()
  2. 切勿在 PagerAdapter 中调用 getItem(),除非您确切地知道自己在做什么。它应该由系统调用,而不是由您调用。如果你真的想从外部调用你的寻呼机中的片段,你可以使用这种方法:

希望涵盖所有内容。 :-)