Fragment view in ViewPager is not restored when resuming

前端 未结 6 1427
独厮守ぢ
独厮守ぢ 2020-11-30 12:23

I have ActionBar Tabs setup. It consists of 4 tabs. Everything is fine until I navigate away from TabbedFragment and returning back.

I create tabs like

6条回答
  •  栀梦
    栀梦 (楼主)
    2020-11-30 12:59

    After doing much research, this worked for me. I have a complex layout with 3 tabs in a fragment, that gets switched out for other fragments. I realized that the ViewpagerAdapter will retain state, even if you press the home button. My problem was switching back and forth would null out the child fragment UI view elements and crash. The key is to not new out your ViewPagerAdapter. Adding the null check for the Adapter worked for me. Also, be sure to allocate setOffscreenPageLimit() for your needs. Also, from what I understand setRetainInstance(true); should not be used for fragments that have UI, it is designed for headless fragments.

    In the fragment that holds your Tabs:

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View view = inflater.inflate(R.layout.fragment_tab, container, false);
        tabLayout = (TabLayout) view.findViewById(R.id.tablayout);
        viewPager = (ViewPager) view.findViewById(R.id.viewPager);
    
        //Important!!! Do not fire the existing adapter!!
        if (viewPagerAdapter == null) {
            viewPagerAdapter = new ViewPagerAdapter(getChildFragmentManager());
            viewPagerAdapter.addFragments(new AFragment(), "A");
            viewPagerAdapter.addFragments(new BFragment(), "B");
            viewPagerAdapter.addFragments(new CFragment(), "C");
        }
        //Allocate retention buffers for three tabs, mandatory
        viewPager.setOffscreenPageLimit(3);
        tabLayout.setupWithViewPager(viewPager);
        viewPager.setAdapter(viewPagerAdapter);
    
        return view;
    }
    

提交回复
热议问题