Я знаком с восстановлением Activity состояния View, и он хорошо выполняет свою работу, как и обещал, но я столкнулся с ситуацией с фрагментами, когда даже виджеты, такие как TextView
, не восстанавливают последнее установленное состояние просмотра.
Сценарий прост:
У меня есть, скажем, 2 фрагмента - F1 и F2 для действия A. Каждый фрагмент имеет набор стандартных виджетов - TextView
, EditText
, Imageview
и т. д. Я выполняю транзакцию, чтобы заменить фрагмент F1 на F2 с измененным состоянием текста TextView:
getSupportFragmentManager().beginTransaction()
.addToBackStack(null)
.replace(R.id.fragment_container, f2Fragment)
.commit();
// In the containing Activity(this is done before replacing f1 with f2):
getSupportFragmentManager().beginTransaction()
.addToBackStack(null)
.add(R.id.fragment_container, f1Fragment)
.commit();
Затем я нахожусь на фрагменте F2 и решаю, скажем, нажать кнопку возврата.Теперь я вернулся в Формулу-1, но вот в чем дело - все TextView
, которые изменили текст, вернулись к исходному, начальному тексту.Виджеты, видимость которых была изменена на INVISIBLE
хотя бы один раз, а затем снова на VISIBLE
, больше не видны.Точно так же, похоже, также сбрасывается изменение состояния включенной кнопки.
Я помню, как читал документы, и я думаю, что восстановление состояния просмотра является частью обещанного контракта.Ситуация, с которой я столкнулся, сняла все прелести использования Fragment
s.
Что я делаю не так?
PS : я попытался предоставить "строка "для фрагмента Имя тега, а также строка в addToBackStack()
, и это не помогло