Когда фрагмент 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.
Ответы
Ответ 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;
}
Надеюсь, это поможет вам определить и исправить вашу проблему.