I have got classic Bottom Navigation created by default with 3 TABs (FragmentOne, FragmentTwo and FragmentThree). The first fragment (FragmentOne) has ViewPager with two static inner Fragments (FragmentInner1 and FragmentInner2).
When app starts evrything is fine so at the FragmentOne we can see FragmentInner1 and can navigate to FragmentInner2.
But after navigating from FragmentTwo to FragmentOne the FragmentInner1 is not visible. That is a problem.
I guess we should recreate it somehow? I investigated manual from here https://developer.android.com/guide/components/fragments.html and https://developer.android.com/training/implementing-navigation/lateral.html#PagerTitleStrip but it does not help and my code looks the same way.
Please help. Thank you!
FragmentOne
public class FragmentOne extends Fragment {
//This is our viewPager
private ViewPager viewPager;
//Fragments
FragmentInner1 fragmentInner1;
FragmentInner2 fragmentInner2;
ViewPagerAdapter adapter;
private View view;
public FragmentOne() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
view = inflater.inflate(R.layout.fragment_fragment_one, container, false);
//Initializing viewPager
viewPager = (ViewPager) view.findViewById(R.id.viewpager);
viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
setupViewPager(viewPager);
return view;
}
private void setupViewPager(ViewPager viewPager) {
adapter = new ViewPagerAdapter(getActivity().getSupportFragmentManager());
fragmentInner1=new FragmentInner1();
fragmentInner2=new FragmentInner2();
adapter.addFragment(fragmentInner1);
adapter.addFragment(fragmentInner2);
viewPager.setAdapter(adapter);
}
@Override
public void onAttach(Context context)
{
super.onAttach(context);
}
@Override
public void onResume() {
super.onResume();
}
@Override
public void onPause() {
super.onPause();
}
@Override
public void onDestroy() {
super.onDestroy();
}
}
ViewPagerAdapter
public class ViewPagerAdapter extends FragmentPagerAdapter {
private final List<Fragment> mFragmentList = new ArrayList<>();
public ViewPagerAdapter(FragmentManager manager) {
super(manager);
}
@Override
public Fragment getItem(int position) {
Fragment fragment = mFragmentList.get(position);
return fragment;
}
@Override
public int getCount() {
return mFragmentList.size();
}
public void addFragment(Fragment fragment) {
mFragmentList.add(fragment);
}
}
FragmentInner1
public class FragmentInner1 extends Fragment {
public static FragmentInner1 newInstance( ) {
FragmentInner1 fragment = new FragmentInner1();
return fragment;
}
public FragmentInner1() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_fragment_inner1, container, false);
}
}
You have to Use getChildFragmentManager()
For Viewpager to adapt Popback Feature.
adapter = new ViewPagerAdapter(getChildFragmentManager());
This is Because the Viewpager have multiple Fragments where Viewpager itself or is holded by another Fragment. So the Child Fragment is to Be Invoked and Used.