【发布时间】:2016-01-20 17:29:26
【问题描述】:
步骤:
- 向
Fragment或Activity请求许可 - 从
onRequestPermissionsResult()中显示一个DialogFragment -
java.lang.IllegalStateException被抛出:onSaveInstanceState之后无法执行此操作
当我在延迟一段时间后显示对话框(使用 postDelayed)时,不会发生这种情况。
根据http://www.androiddesignpatterns.com/2013/08/fragment-transaction-commit-state-loss.html) 在后蜂窝设备上,我们可以在onPause() 和onStop() 之间commit(),而不会出现任何状态丢失或异常。
这是示例项目源、日志文件和记录的问题的链接。
https://drive.google.com/folderview?id=0BwvvuYbQTUl6STVSZF9TX2VUeHM&usp=sharing
我还打开了一个问题https://code.google.com/p/android/issues/detail?id=190966,但它被标记为 WorkingAsIntended,他们建议只捕获异常。但这并不能解决问题。我知道其他解决方法,但这不是android bug吗?
更新 该错误的状态再次被“分配”。希望它会尽快修复。 我的临时解决方案是
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
// do your fragment transaction here
}
}, 200);
【问题讨论】:
-
你在使用支持对话框片段吗??你在使用片段活动吗?
-
@dex 是的,支持对话框片段和appcompatactivity
-
那么已经记录了相同的检查:code.google.com/p/android/issues/detail?id=23761
-
@dex 这不一样。如果 onActivityResult() 调用活动停止并调用 onSaveInstanceState()。然后当你想显示对话框时,抛出异常并且没关系。但在这种情况下,调用活动并没有停止,它只是暂停..
-
这也给我带来了很多麻烦。看起来有一个官方错误和一群人抱怨它仍然没有“修复”,因为它被标记:code.google.com/p/android-developer-preview/issues/…
标签: android android-fragments android-dialogfragment android-permissions android-6.0-marshmallow