Как сохранить состояния фрагментов, чтобы не создавать их заново - PullRequest
2 голосов
/ 20 мая 2019

Я реализовал что-то вроде рисунка ниже:

enter image description here

У меня есть несколько вкладок, и каждая вкладка может иметь несколько кнопок, которые загружают разные фрагменты. В этой ситуации в вкладка 1 , кнопка 1 загружает фрагмент 1 и кнопка 2 загружает фрагмент 2 и каждый раз фрагменты будут воссозданы. но я хочу, чтобы кнопки загружали фрагменты только один раз и избегали повторного создания в следующий раз.

Кнопка 1 Текущий onClick:

FragmentTransaction transaction = getActivity().getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.container_root, FragmentOne.newInstance(),"Frag1");
transaction.commit();

Как сохранить состояния фрагментов, чтобы избежать перезагрузки каждый раз?


EDIT

Tab 1 и Tab 2 Фрагменты находятся внутри ViewPager, поэтому я не мог использовать ViewPager для Fragment 1 и Fragment 2 .

Ответы [ 2 ]

0 голосов
/ 20 мая 2019

Используйте приведенный ниже код

FragmentTransaction transaction = getActivity().getSupportFragmentManager().beginTransaction();
transaction.add(R.id.container_root, FragmentOne.newInstance(),"Frag1");
transaction.addToBackStack("Frag1");
transaction.commit();

вместо

FragmentTransaction transaction = 
getActivity().getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.container_root, FragmentOne.newInstance(),"Frag1");
transaction.commit();

Проблема:

Вы пытаетесь заменить фрагмент при добавлении их через FragmentTransaction .Если вам нужно сохранить их экземпляр, вам нужно использовать метод Transactions.add .

Внимание:

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

0 голосов
/ 20 мая 2019

вы можете создавать свои вкладки с ViewPager

ViewPager pager = (ViewPager) findViewById(R.id.viewPager);
pager.setOffscreenPageLimit(tabsNumber - 1); // e.g. send 2 as parameter for 3 tabs

и сохранить состояние вкладки

...