Android | Остановить TabLayout перезагрузить / обновить мои фрагменты

У меня есть аналогичный макет вкладки с 4 вкладками.

Введите описание изображения здесь

Когда я перехожу от вкладки 0 к вкладке 2, а затем возвращаюсь к вкладке 0 , Fragment0 перезагружается. Такая же проблема, когда я перехожу с вкладки на другую вкладку.
Я бы сначала загрузил Фрагмент и повторно использовал их без перезагрузки.

Это часть моего кода (я использую этот учебник ):

MyActivity:

@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.my_activity); toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); if(getSupportActionBar()!=null) { getSupportActionBar().setDisplayHomeAsUpEnabled(true); } if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { Window window = MyActivity.this.getWindow(); window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); window.setStatusBarColor(ContextCompat.getColor(MyActivity.this, R.color.colorPrimaryDark)); } viewPager = (ViewPager) findViewById(R.id.viewpager); setupViewPager(viewPager); tabLayout = (TabLayout) findViewById(R.id.tabs); tabLayout.setSelectedTabIndicatorColor(Color.parseColor("#FFFFFF")); tabLayout.setupWithViewPager(viewPager); setupTabIcons(); //I have only icon, not text. } private void setupViewPager(ViewPager viewPager) { ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager()); adapter.addFragment(MyFragment.newInstance(0)); adapter.addFragment(MyFragment.newInstance(1)); adapter.addFragment(new DifferentFragment()); adapter.addFragment(new TestFragment()); viewPager.setAdapter(adapter); } class ViewPagerAdapter extends FragmentPagerAdapter { private final List<Fragment> mFragmentList = new ArrayList<>(); public ViewPagerAdapter(FragmentManager manager) { super(manager); } @Override public Fragment getItem(int position) { return mFragmentList.get(position); } @Override public int getCount() { return mFragmentList.size(); } public void addFragment(Fragment fragment) { mFragmentList.add(fragment); } @Override public CharSequence getPageTitle(int position) { return null; } } 

my_activity.xml:

 <?xml version="1.0" encoding="utf-8"?> <android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent"> <android.support.design.widget.AppBarLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"> <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" android:background="?attr/colorPrimary" app:layout_scrollFlags="scroll|enterAlways" app:popupTheme="@style/ThemeOverlay.AppCompat.Light" /> <android.support.design.widget.TabLayout android:id="@+id/tabs" android:layout_width="match_parent" android:layout_height="wrap_content" app:tabMode="fixed" app:tabGravity="fill"/> </android.support.design.widget.AppBarLayout> <android.support.v4.view.ViewPager android:id="@+id/viewpager" android:layout_width="match_parent" android:layout_height="match_parent" app:layout_behavior="@string/appbar_scrolling_view_behavior" /> </android.support.design.widget.CoordinatorLayout> 

Как вы можете видеть в Documentation setOffscreenPageLimit

Внутри вашей функции setupViewPager (ViewPager viewPager) добавьте следующее:

 viewPager.setOffscreenPageLimit(limitNumberOfPages); //before setAdapter viewPager.setAdapter(adapter); 

И limitNumberOfPages – это int, который содержит количество страниц, которые можно прокручивать без перезагрузки фрагментов. Если у вас есть 4 вкладки, вы должны использовать:

 int limitNumberOfPages = 3; 

Номер по умолчанию для этого свойства: 1.

Я решил это самостоятельно Простой, использование:

 viewPager.setOffscreenPageLimit(numberOfPages); 

Из справки: задайте количество страниц, которые должны быть сохранены в обе стороны текущей страницы в иерархии представлений в состоянии ожидания.

В моем случае мне нужно 3 страницы, которые следует сохранить.

ViewPager содержит фрагменты слева и / или справа от выбранной вкладки. Это необходимо для быстрой анимации изменений вкладок.

Вы можете хранить ссылки на свои фрагменты в своей деятельности, но эти ссылки могут быть пустыми.