Компонент навигации Android: как сохранить состояние фрагмента - PullRequest
1 голос
/ 18 мая 2019

Я использую bottomNavigationView и компонент навигации. Подскажите пожалуйста, как я не уничтожаю фрагмент после перехода на другую вкладку и возврата на старую? Например, у меня есть три вкладки - A, B, C. Моя стартовая вкладка - A. После перехода к B, затем возврата A. Когда я вернусь к вкладке A, я не хочу, чтобы она была создана заново. Как это сделать? Спасибо

Ответы [ 2 ]

2 голосов
/ 18 мая 2019

В соответствии с открытым выпуском , Навигация не поддерживает напрямую несколько стеков назад, т.е. сохраняет состояние стека B, когда вы возвращаетесь к B из A или C, поскольку фрагменты не поддерживают несколько стеков назад..

Согласно этому комментарию :

NavigationAdvancedSample теперь доступен в https://github.com/googlesamples/android-architecture-components/tree/master/NavigationAdvancedSample

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

Мы продолжим работу с API Fragment для поддержки нескольких обратных стеков и API навигации, чтобы подключить его один раз.создан, что избавит от необходимости что-то вроде файла NavigationExtensions.kt.Мы продолжим использовать эту проблему для отслеживания этой работы.

Поэтому вы можете прямо сейчас использовать подход NavigationAdvancedSample в своем приложении и пометить проблему, чтобы получать обновления, когда основная проблема решена.и прямая поддержка добавлена ​​в навигацию.

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

Объявите фрагмент в действии и создайте экземпляр фрагмента в методе onCreate, затем передайте экземпляр фрагмента в методе updateFragment.Создайте столько экземпляров фрагментов, сколько требуется, в соответствии с идентификатором элемента прослушивателя нижней навигации.

Fragment fragmentA;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);

fragmentA = new Fragment();
updateFragment(fragmentA);
}

public void updateFragment(Fragment fragment) {
FragmentTransaction transaction = 
getSupportFragmentManager().beginTransaction();
transaction.add(R.id.layoutFragment, fragment);
transaction.commit();
}

Кроме того, убедитесь, что вы используете android.support.v4.app.Fragment и вызываете getSupportFragmentManager ()

...