2016-11-08 3 views
3

Согласно docsКогда безопасно совершать FragmentTransaction?

A сделке фрагмента может быть создан только/совершенный до проведения деятельности спасительной своего состояния. Если вы попытаетесь совершить сделку после того, как Activity.onSaveInstanceState() (и до следующего Activity.onStart или Activity.onResume(), вы получите сообщение об ошибке.

Я понимаю, что в первой части что транзакция фрагмента не может быть выполнена после Activity.onSaveInstanceState(), , потому что состояние после фиксации может быть потеряно, если необходимо восстановить активность.

Но я не понимаю, почему мы не можем совершить фрагмент транзакции до Activity.onStart или Activity.onResume()? Oncreate() также до Activity.onStart или Activity.onResume(). Означает ли это, что мы не можем даже зафиксировать его в onc reate()?

ответ

3

Ключевым моментом здесь является то, что вы не можете совершить сделку после вызова onSaveInstanceState()и до следующегоonStart() или onResume().

Вы можете совершать сделки только штрафа на начальном onCreate() и последующем onStart() или onResume(), потому что нет состояния.

Однако, если операция восстанавливает свое состояние (то есть onSaveInstanceState() был ранее вызван, а Activity воссоздает себя с этим состоянием, вы не можете выполнить транзакцию фрагмента. Это связано с тем, что если вы совершили транзакцию фрагмента до операции восстанавливая предыдущее состояние фрагмента, вы оказываетесь в ситуации, когда неясно, в каком состоянии вы находитесь. Сохраняет ли сохраненное состояние над новым состоянием, которое вы создали, совершив транзакцию фрагмента или если новая транзакция имеет приоритет над сохраненное состояние?

Самый простой способ проверить этот сценарий - проверить, прошел ли комплект savedInstanceState в onCreate(), а другие методы жизненного цикла - null. Если это значение равно null, re не является сохраненным состоянием, и вы можете безопасно выполнять транзакцию. Если это не пустое, то сохраняется состояние, которое вы, вероятно, хотите сохранить.

+0

Я не понимаю, почему нет никакого государства в OnCreate()? Не удалось ли восстановить состояние, когда пакет savedInstanceState передан в onCreate()? Мы можем восстановить состояние в onCreate() или onRestoreInstanceState. – user3591494

+0

Состояние еще не восстановлено в 'onCreate()', потому что Activity только что была создана. Например, вы еще не создали/не настроили представления контента, поэтому сохранить сохраненные представления некуда. Вы можете восстановить * свое * состояние приложения в 'onCreate()', если хотите, но это не значит, что все остальные компоненты завершили восстановление своего состояния. –

+0

Означает ли это, что setContentView() все еще работает, когда Oncreate() завершает работу, и он будет продолжать работать до запуска функции onResume()? – user3591494

1

Это безопасно в любое время до того onSaveInstanceState(), который по существу означает, что перед тем onPause()/onResume(), и если ваша активность когда-либо пошел onPause(), то это безопасно только после onResume().

Например, во время onActivityResult(), вы на самом деле не пошли после onResume(), поэтому открытие диалога в onActivityResult() может привести к сбою.

0

могли бы хотеть иметь в виду совершено сделка может не уже выполненных.
Это ручки, что:

getSupportFragmentManager().executePendingTransactions(); 
Смежные вопросы