Как сохранить значение переменной в фрагменте при переходе на другой фрагмент и возвращении?
В моём фрагменте от значения Boolean зависит расположение view на экране. У меня получается сохранять эту переменную при выходе из приложения с помощью SharedPreferences. Но также я хочу добиться, чтобы когда переходишь на другие фрагменты и возвращаешься, это значение сохранялось. Пытаюсь сделать это через SavedInstanceState. Логирование показало, что мой код не работает из-за того что Bundle всегда равен null. Это значит, что Bundle уничтожается при переходе на другой фрагмент? И как в этом случае можно сохранить переменную?
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
val share = activity?.getSharedPreferences("variant", Context.MODE_PRIVATE)
if (savedInstanceState != null) { isListView = savedInstanceState.getBoolean("key") }
else { isListView = share!!.getBoolean("variant", false) }
if (isListView) {
binding?.rcList?.layoutManager = GridLayoutManager(context, 1)
nameIconGrid = "плитка"
} else {
binding!!.rcList.layoutManager = GridLayoutManager(context, 2)
nameIconGrid = "список"
}
}
override fun onSaveInstanceState(outState: Bundle) {
super.onSaveInstanceState(outState)
outState.putBoolean("key", isListView) }
``
Ответы (1 шт):
Вариантов так то много.
Использовать sharedViewModel
Обновлять значение в тех же shearedPreferences,
Передавать значение через safe args,
передавать значение через bundle
Если мне нужно только значение, то я бы передавал через safe args значение. Если еще и логика разделяется между фрагментами, то проще всего использовать общую viewModel. Кстати binding лучше исползьовать подобным образом:
private var _binding: ActivityMainBinding? = null
private val binding get() = _binding!!
//или так, если хочется собственный коментарий указать
private val binding get() = checkNotNull(_binding) { "Комментарий" }
...
override onDestroyView() {
super.onDestroyView()
_binding = null
}