2012-12-03 56 views
13

当我开始Camera意图时,我注意到onActivityResult之前调用onResumefragment生命周期。片段的onActivityResult何时针对片段生命周期进行调用?

我也注意到onActivityResult被调用后onStart

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

  • onStart中的NOT NULL。不要再
  • NULL在onActivityResult
  • 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:我正在使用谷歌支持库来支持旧API版本的碎片。

+0

你有没有设法解决这个问题? – aProgrammer

+2

它们可能是同一个'Fragment1'类的不同实例吗?在日志中添加一个'System.identityHashCode(this)'来打印每个实例的标识符 – Xiao

回答

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." 

我能解决我的问题是我的“空白构造”不是重新instansiateing我的片段的方式。在片段中,我只有1个变量是'ID',当用户选择一个项目时,它会返回到我的活动中。我简单地通过调用传入的值的正常构造函数来重新实例化片段。

例如。

public UIDialogFragmentVolume() { 
    this(ID); 
} 

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

我希望这可以帮助您确定并解决您的问题。

2

要回答你原来的问题,这里生命周期的顺序回调

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