2013-07-25 1 views
0

У меня есть фрагмент, который вызывает вызов startActivityForResult() в OnCreateView, если нет Интернета. В NoInternet Activity есть кнопка повтора, которая завершает() действие (поэтому я могу, возможно, проверить соединение снова). Когда действие завершается, OnCreateView фрагмента никогда не вызывается (потому что OnCreate() активности хоста никогда не вызывается), и я не верю, если снова будет интернет.OnCreateView не вызывается после startActivityForResult() finish() es

Теперь простой способ проверить, существует ли интернет в OnStart() основного действия (которое содержит фрагмент).

Но мне было интересно: Есть ли способ заставить OnCreateView после завершения() выполнить операцию, начатую с startActivityForResult()?

ответ

1

Я думаю, что ваша проблема заключается в понимании жизненного цикла фрагментов. Если вы вызываете startActivityForResult() на фрагменте, он будет выполняться в содержащем фрагмент Activity. Теперь действие переходит в состояние «Приостановлено», а затем «Остановлено», а также «Фрагмент». Если вы закончите «ResultActivity», состояния Started and Resumed будут переданы в Activity и Fragment.

Итак, как вы уже сказали, просто переместите проверку соединения и вызовите startActivityForResult() в onStart().

Нет необходимости создавать новое представление для фрагмента. Если вы хотите изменить программу Viewmetmetically, вы можете сделать это в onStart() и onResume().

Но не разбивайте жизненный цикл только для вызова метода, который можно было бы легко вызвать в другом обратном вызове.

+0

Я полностью забыл, что у фрагментов есть OnStart (где я должен, вероятно, поставить свою логику обработки интернета). Приветствия. – VM4

1

Я не уверен точно, как вы используете фрагменты/действия, о которых идет речь, но похоже, что фрагментарный вид основной деятельности не уничтожается, когда вы вызываете startActivityForResult() для нового действия. В некоторых случаях это поведение является нормальным, что означает, что ваш фрагмент будет остановлен или приостановлен. Таким образом, проверка вашей сети в OnStart() или OnResume() будет правильным использованием.

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