Предыстория:
У меня есть основной Activity
, он обертывает основной Fragment
, который можно изменить, и чтобы сохранить задний стек, я использую задний стек FragmentManager
.
Основное отличие от сохранения стека действий заключается в том, что когда фрагмент помещается в задний стек и заменяется, он вызывает его onDestroyView()
, но не onDestroy()
, а когда он возвращается, его представление будет воссоздано с onCreateView()
. (однако onCreate()
не вызывается, так как объект фрагмента не удален)
В стеке действий этого не произойдет, и представления останутся.
Это имеет положительный эффект на недорогих устройствах, так как ОС Android может освободить немного памяти, и вам не нужно поддерживать правильные представления (в моем приложении сообщения с сервера могут изменить представление в любое время), поэтому можно сэкономить драгоценное пропускная способность, а также.
Настоящая проблема:
Допустим, у меня есть фрагмент, и пользователь нажимает на что-то, и его вид изменяется, например. список расширен.
Если затем пользователь перейдет к другому экрану (т.е. к фрагменту), предыдущий фрагмент будет перемещен в стек, и его представление будет уничтожено.
Когда пользователь возвращается, фрагмент будет воссоздан и не будет «запоминать» изменения, внесенные пользователем, например. список не будет расширен, как следует
так как я могу сохранить состояние и восстановить его, не делая особых случаев для каждого представления?
Нежелательные ответы:
- сохранить представление живым: если что-то сделать, чтобы сохранить представление, это нарушит эффективность фрагмента.
- используя
onSaveInstanceState()
: он не будет вызываться, когда фрагмент помещается в задний стек, поскольку активность не уничтожается, и это не изменение конфигурации. - специальный объект: лучше не делать этого, если система может сделать это за вас.
ListView
, состояние кнопки/флажка и т. д. Я считаю, что это будет то, что вы хотите делать большую часть своего времени. Если для этого есть причина, упомяните об этом, и я надеюсь, что есть и другие способы. - person Sufian   schedule 17.12.2014Activity
мало чем отличается от восстановленияFragment
, разница только в том, что вы восстанавливаете состояниеFragment
вonActivityCreated()
. - person Sufian   schedule 01.01.2015