0

кажется, что, когда фрагмент А заменяется фрагмент B, A.onResume() вызываются перед остановкой фрагментировать A.Как избежать выполнений onResume инициализации, когда старый фрагмент заменяются

Я исполнительские инициализаций в A.onResume(), и я бы хотел избежать их вызова при удалении A.

Можно ли:

  • избежать вызова A.onResume() при замене этого фрагмента?
  • обнаруживает в A.onResume(), что этот вызов генерируется из-за замены фрагмента?

вот мой код для замены фрагмента:

FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); 
ft.replace(R.id.main_content, fragment); 
ft.commit(); 
+0

Как вы уверены, что 'onResume()' вызывается во время замены? –

+0

Это может быть трек. Отладка, которую я сделал, была следующей: 1) отметить идентификатор старого объекта фрагмента. 2) запуск замены 3) точка останова при заменяющем коде 4) точка останова в onresume, подтверждающая, что она находится на методе onResume старого фрагмента (id). onResume запускается инфраструктурой ОС (moveToState). Я не вижу, что еще может вызвать onResume. Но я исследую этот трек, спасибо! – Kain

ответ

0

Проблема может быть в самом отладчике.

Если вы запустите приложение с помощью отладчика, вы увидите небольшой отладчик с диалоговом прикреплением, это диалоговое окно является системным диалоговым окном, поэтому на время, когда его отображаемая система будет действовать, поскольку ваша деятельность перестает быть приоритетной задачей, приостанавливающей ее (как и любой внутренний фрагмент, вы load at on create).

Попробуйте следовать, в ваших фрагментах печатайте в журнале, когда вызывается возобновление и пауза. Затем запустите приложение без отладки.

И самый простой способ иметь отладчик и не иметь такого поведения - присоединить debuger после запуска приложения. :(

+0

Спасибо за ваше предложение. Я попробовал, но даже без отладки, журналы показали, что onResume работает на старом фрагменте (после него новый) сразу после замены. – Kain

Смежные вопросы