Подтвердить что ты не робот

Когда фрагмент onActivityResult вызывается в отношении жизненного цикла фрагментов?

когда я запускаю Camera намерение, я заметил, что onActivityResult вызывается до onResume в fragment жизненном цикле.

Я также заметил, что onActivityResult вызывается после onStart.

Но вот странная часть: у меня есть переменная fileUri == "некоторый путь к изображению". Эта переменная

  • NOT NULL в onStart.
  • NULL в onActivityResult
  • NOT NULL снова в onResume

см. logCat

12-03 14:39:42.418: D/Fragment1(29220): onStart fileUri: file:///mnt/sdcard/OPS_IMAGES/IMG_20121203_143933.jpg
12-03 14:39:42.463: W/PhoneWindow(29220): Previously focused view reported id 2131034140 during save, but can't be found during restore.
12-03 14:39:42.463: D/Fragment1(29220): onActivityResult fileUri is NULL!!!
12-03 14:39:42.468: D/Fragment1(29220): onResume fileUri: file:///mnt/sdcard/OPS_IMAGES/IMG_20121203_143933.jpg

Хуже того, это происходит только 50% времени. Еще 50% onActivityResult могут получить доступ к значению fileUri без проблем...

Как я должен отлаживать это?

ПРИМЕЧАНИЕ. Для простоты я не включил код моих методов onResume, onStart, onActivityResult. Это просто базовые методы с проверкой переменных и логическим вызовом. При необходимости я отредактирую вопрос и добавлю эти методы.

ПРИМЕЧАНИЕ 2. Я использую библиотеку поддержки google для поддержки фрагментов в более старых версиях API.

4b9b3361

Ответ 1

Чтобы ответить на ваш первоначальный вопрос, вот порядок обратных вызовов Lifecycle

12-09 16:38:41.800 10227-10227/org.Test I/Fragment: ## OnStart()
12-09 16:38:41.820 10227-10227/org.Test I/Fragment: ## OnActivityResult()
12-09 16:38:41.821 10227-10227/org.Test I/Fragment: ## OnResume()

Ответ 2

Это не та область, в которой я занимался, или проблема, которую я имел, но если ваша переменная не видна по какой-либо причине... Пробовали ли вы использовать другой способ ссылки на значение?

Мое предложение состояло в том, чтобы попытаться использовать переменную SharedPreferences и сохранить там значение в редакторе и вытащить его обратно. Это может быть не лучшее решение, но может быть проблемой на данный момент.

У меня было похожее сообщение об ошибке из logcat, вот как я наткнулся на ваше сообщение.

"01-27 11:13:42.899: W/PhoneWindow(1591): Previously focused view reported id 16908862 during save, but can't be found during restore."

Как я смог исправить свою проблему, мой "Blank Constructor" не возвращал мой фрагмент повторно. В фрагменте у меня есть только 1 переменная, которая является "идентификатором", которая возвращается обратно в мою активность, когда пользователь выбирает элемент с их выбором. Я просто обновил свой фрагмент, вызвав свой обычный конструктор со значениями, переданными в.

например.

public UIDialogFragmentVolume() {
    this(ID);
}

public UIDialogFragmentVolume(int typeID) {
    ID = typeID;
}

Надеюсь, это поможет вам определить и исправить вашу проблему.