17

当我开始Camera意图时,我注意到在生命周期onActivityResult之前被调用过。onResumefragment

我也注意到onActivityResult被称为 after onStart

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

  • 在 onStart 中不为空。
  • 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 方法的代码。它们只是具有变量检查和日志调用的基本方法。如果需要,我将编辑问题并添加这些方法。

NOTE2:我正在使用谷歌支持库来支持旧 API 版本的片段。

4

2 回答 2

7

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

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()
于 2016-12-09T14:43:02.833 回答
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."

我能够解决我的问题的方法是我的“空白构造函数”没有重新实例化我的片段。在片段中,我只有 1 个变量是“ID”,当用户选择带有他们选择的项目时,它会传递回我的活动。我只是通过使用传入的值调用我的普通构造函数来重新实例化我的片段。

例如。

public UIDialogFragmentVolume() {
    this(ID);
}

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

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

于 2013-01-27T00:20:37.053 回答