fdam
fdam

Reputation: 830

How to avoid reload data when tabs change?

How can I avoid a recyclerview to reload when the tabs change? For example, I have a TabLayout with three Tabs, my ViewPager is:

class ViewPagerAdapter extends FragmentPagerAdapter {

        public ViewPagerAdapter(FragmentManager fm) {
            super(fm);
        }

        @Override
        public Fragment getItem(int position) {
            switch (position) {
                case 0:
                    return new Tab1Fragment();
                case 1:
                    return new Tab2Fragment();
                case 2:
                    return new Tab3Fragment();
            }
            return null;
        }

        @Override
        public int getCount() {
            return 3;
        }

        @Override
        public CharSequence getPageTitle(int position) {
            switch (position) {
                case 0:
                    return "tab1";
                case 1:
                    return "tab2";
                case 2:
                    return "tab3";
            }
            return null;
        }

    }

In the first one, I have a recyclerview, when I change the tabs and back to the first one, the list is reloaded. There is a way do avoid this reload? Just keep the data loaded.

Upvotes: 2

Views: 2693

Answers (2)

gsb
gsb

Reputation: 5640

Android keeps only one fragment on either side of the current fragment in a ViewPager by default. So when you come back to your first tab from the third one, it will recreate the first tab which is what is happening in your case. Here is the documentation.

You need to keep all the Fragments in memory with viewPager.setOffscreenPageLimit(<(number of fragments in view pager) - 1>) which is 2 in your case.

Of course, as the docs suggest, this number should be kept low especially if its a complex layout.

Upvotes: 11

Hamed Nabizadeh
Hamed Nabizadeh

Reputation: 527

yourViewPager.setOffscreenPageLimit(2);

Upvotes: 2

Related Questions