什么时候片段的onActivityResult被称为片段生命周期?

时间:2012-12-03 13:52:29

标签: android android-fragments fragment android-lifecycle

当我开始Camera意图时,我注意到在onActivityResult生命周期中onResume之前调用了fragment

我还注意到在onActivityResult之后调用onStart

但这是奇怪的部分:我有变量fileUri ==“一些图像路径”。 这个变量是

  • onStart中的NOT NULL。
  • onActivityResult中的NULL
  • onResume
  • 中再次为NOT NULL

参见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:我正在使用谷歌支持库来支持旧API版本的片段。

2 个答案:

答案 0 :(得分:5)

要回答您的原始问题,以下是生命周期回调的顺序

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()

答案 1 :(得分:1)

这不是我一直在修补的区域或我遇到的问题,但如果您的变量因任何原因不可见......您是否尝试过使用不同类型的方式来引用该值?

我的建议是尝试使用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."

我能够解决我的问题的方式是我的“空白构造函数”并没有重新确定我的片段。在片段中,我只有一个变量是一个'ID',当用户选择一个带有选择的项目时,它会传回我的活动。我通过使用传入的值调用我的普通构造函数来简单地重新设置我的片段。

例如

public UIDialogFragmentVolume() {
    this(ID);
}

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

我希望这有助于您确定和解决问题。