Я отвечу на ваш вопрос в двух частях.
Решение
Не раздувайте вид каждый раз, когда возвращаетесь к предыдущему фрагменту. Сохраните View
в локальной переменной и увеличьте ее только один раз. Предложено Иэном Ланке
private var savedViewInstance: View? = null
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
return if (savedViewInstance != null) {
savedViewInstance
} else {
savedViewInstance =
inflater.inflate(R.layout.fragment_professional_details, container, false)
savedViewInstance
}
}
Объяснение
Давайте разберемся жизненный цикл фрагмента под архитектурой навигации.
Сценарий : Мы берем два фрагмента, HomeFragment и DashboardFragment. Оба фрагмента принадлежат одному и тому же NavGraph, и начальная точка назначения - Домашний фрагмент.
Жизненный цикл фрагмента при запуске приложения-
HomeFragment: onAttach:
HomeFragment: onCreate:
HomeFragment: onCreateView:
HomeFragment: onViewCreated:
HomeFragment: onActivityCreated:
HomeFragment: onStart:
HomeFragment: onResume:
При навигации: Home Fragment ---> Dashboard Fragment
DashboardFragment: onAttach:
DashboardFragment: onCreate:
DashboardFragment: onCreateView:
DashboardFragment: onViewCreated:
DashboardFragment: * Активность
DashboardFragment: onStart:
DashboardFragment: onResume:
HomeFragment: onPause:
HomeFragment: onStop:
HomeFragment: onDestroyView:
В навигации: Dashb oard Fragment ---> Home Fragment
HomeFragment: onAttach:
HomeFragment: onCreate:
HomeFragment: onCreateView:
HomeFragment: onViewCreated:
HomeFragment: onActivityCreated:
HomeFragment: onStart:
HomeFragment: onResume:
DashboardFragment: onPause:
DashboardFragment: onStop:
HomeFragment: onDestroy:
DashboardFragment: onDestroyView:
DashboardFragment: onDestroy:
Если мы сохраняем представление на исходном HomeFragment: onCreateView()
и увеличиваем одно и то же представление каждый раз для следующего вызова HomeFragment: onCreateView()
, мы можем восстановить старое представление.
Если вы заметили HomeFragment: onDestroy()
будет вызван, но после звонка HomeFragment: onViewCreated()
. Вызов HomeFragment: onDestroy () просто уничтожает старый экземпляр HomeFragment.
Я по-прежнему считаю, что такой способ работы не лучший, но так будет до тех пор, пока Google не выдаст что-то вроде onFragemntRestore()
.
Чтобы действительно обновить представление, вам необходимо ViewModel и наблюдать за изменениями для изменения представлений.
Для получения дополнительной информации вы go можете go через this нить. удачного кодирования!