Android сохраняет программно созданные представления

Я программно создаю RelativeLayout с некоторыми другими представлениями внутри него и добавляю его к родителю, определенному в XML. Но все представления (включая макет), которые были созданы программно, исчезают после повторного создания активности. Нужен ли объект SharedPreferences для сохранения значений, а затем повторного создания макета или есть более простой способ сохранить его?

P.S. всем новым созданным представлениям присваивается идентификатор


person Droidman    schedule 25.12.2012    source источник
comment
они создаются в onCreate, onResume,?   -  person CodeShane    schedule 26.12.2012
comment
они создаются в onResume() в результате нажатия кнопки   -  person Droidman    schedule 26.12.2012
comment
Нужен ли мне объект SharedPreferences для сохранения значений — да, конечно — или какие-то другие средства постоянного хранения. Все, что создает ваша программа, будет легко потеряно, если оно не сохраняется явным образом. (За исключением API preference, который включает код для прозрачного сохранить настройки.)   -  person JimmyB    schedule 26.12.2012


Ответы (2)


Нужен ли мне объект SharedPreferences для сохранения значений и повторного создания макета?

Вы говорите, что создаете эти виджеты в onResume(). Ваш код в onResume() должен знать, какие виджеты необходимо создать. Если это чисто временная информация, и вы беспокоитесь о таких вещах, как уничтожение и повторное создание действия из-за поворота экрана или другого изменения конфигурации, используйте onSaveInstanceState() для действия или фрагмента, чтобы передать данные об этих виджетах из старого в новый. новый экземпляр действия. Если, с другой стороны, вы беспокоитесь о возможности воссоздать эти представления через несколько месяцев, вам необходимо постоянно хранить эту информацию: SharedPreferences, базу данных, некоторую другую файловую структуру, «облако» и т. д.

person CommonsWare    schedule 25.12.2012
comment
И как сохранить представление, созданное программно, в представление повторного использования в общих префах? - person John Sardinha; 19.04.2016
comment
@Kurlicue: вы не сохраняете представление. Вы сохраняете данные, необходимые для воссоздания представления. - person CommonsWare; 19.04.2016
comment
поэтому мы храним данные представления, и как нам сохранить само представление, не находясь в onSaveInstanceState? - person John Sardinha; 19.04.2016
comment
@Kurlicue: как нам сохранить само представление - вы этого не сделаете. Новый экземпляр действия снова создает представление, как и для любого другого представления. Тот факт, что вы используете RecyclerView, этого не меняет. - person CommonsWare; 19.04.2016
comment
Каким методом мне нужно добавить представления, чтобы они воссоздались? - person John Sardinha; 19.04.2016

Я рекомендую вам изучить Activity.onSaveInstanceState(Bundle):

Реализация по умолчанию заботится о большей части состояния пользовательского интерфейса для каждого экземпляра, вызывая onSaveInstanceState() для каждого представления в иерархии, которое имеет идентификатор, и сохраняя идентификатор текущего сфокусированного представления (все они восстанавливаются реализацией onRestoreInstanceState() по умолчанию). Если вы переопределите этот метод, чтобы сохранить дополнительную информацию, не полученную каждым отдельным представлением, вы, вероятно, захотите вызвать реализацию по умолчанию [через super.onSaveInstanceState() и super.onRestoreInstanceState()], в противном случае будьте готовы сохранить все состояние каждого представления самостоятельно.

https://developer.android.com/reference/android/app/Activity.html#onSaveInstanceState(android.os.Bundle)

а также мой ответ здесь:

Как программно присвоить идентификатор представлению ?

person CodeShane    schedule 25.12.2012