Как не уничтожить фрагмент с помощью androidX

теперь я пробую навигацию androidX и нижнюю панель навигации, когда я использую ее, как показано ниже supportFragmentManager = getSupportFragmentManager(); navHostFragment =(NavHostFragment)supportFragmentManager.findFragmentById(R.id.frag_nav); navController = navHostFragment.getNavController(); NavigationUI.setupWithNavController(navigation, navController);

Я обнаружил проблему, каждый раз переключая bottomNavigationBar, фрагмент будет воссоздан, вся сетевая задача в целевом фрагменте будет повторяться, как сохранить состояние фрагмента при переключении в androidX?

7
0
2 913
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

У меня тоже была такая же проблема. Я использую BottomNavigationView с компонентами архитектуры навигации, и каждый раз при воссоздании фрагмента. Это предполагаемое поведение, как вы можете видеть в системе отслеживания проблем Google (https://issuetracker.google.com/issues/109856764).

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

Также позаботьтесь о способе получения ViewModel внутри фрагмента. Если вы сделаете это так, как этот viewModel = ViewModelProviders.of(this, viewModelFactory).get(MyViewModel::class.java), ViewModel получит область видимости фрагмента (она будет уничтожена при уничтожении фрагмента). Вы должны получить ViewModel с областью действия, чтобы она могла выжить при переключении между фрагментами. Можно сделать вот так viewModel = ViewModelProviders.of(activity!!, viewModelFactory).get(MyViewModel::class.java)

Решение для этого от Google github.com/android/architecture-components-samples/tree/mast‌er /…

Sharad 19.05.2020 03:49

Другие вопросы по теме