I have a FirstFragment with viewPager (ViewPager contains several TestFragments). FirstFragment also contains a button. I would like to change UI of current TestFragment when I click the button.
Unfortunately when I call getView() or try to access the stored property (View rootView). They both return null.
How should I approach this?
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
}
}
}
Please note that viewPager creates a new fragment everyting .getItem() is called. I do not cache the fragments. This problem occured when I stopped "caching" the fragments in HashMap (FirstFragment was keeping the reference).