我有一个带有viewPager的FirstFragment(ViewPager包含几个TestFragments)。 FirstFragment还包含一个按钮。当我点击按钮时,我想更改当前TestFragment的UI。
不幸的是,当我调用getView()或尝试访问存储的属性(View rootView)时。它们都返回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()。我没有缓存碎片。当我停止在HashMap中“缓存”片段时出现了这个问题(FirstFragment保留了引用)。
答案 0 :(得分:1)
这样你就可以解决一个问题:
getChildFragmentManager()
。希望涵盖所有。 : - )