android - 从 onRequestPermissionsResult() 中调用 DialogFragment 的 show() 会导致 Marshmallow 中出现 IllegalStateException

标签 android android-fragments android-dialogfragment android-permissions android-6.0-marshmallow

步骤:

  1. FragmentActivity
  2. 请求权限
  3. onRequestPermissionsResult()
  4. 中显示一个 DialogFragment
  5. java.lang.IllegalStateException is throw: Can not perform this action after 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);

最佳答案

该错误已被接受并将被修复,但是,我强烈不同意 postDelayed 和 timer 解决方案。最好的方法是在 Activity 中引入一个状态标志,在回调中设置,并在 onResume 或类似中使用。例如:

private boolean someFlag;

public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
// some code checking status
    someFlag = true;
}

然后在onResume:

protected void onResume() {
    if(someFlag == true) {
        doSomething();
        someFlag = false;
    }
}

关于android - 从 onRequestPermissionsResult() 中调用 DialogFragment 的 show() 会导致 Marshmallow 中出现 IllegalStateException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33264031/

相关文章:

java - 注册表错误 : JAVA 1. 7 而不是 1.6

java - 循环获取动态数据

android - Android 中带有 GridView Child 的 ExpandableLIstView

android - 像YouTube应用一样叠加显示

java - 无法启动 Activity ComponentInfo : Binary XML file line #6: Error inflating class fragment

android - 无法执行 aapt(NoSuchElementException at AbstractIndexedListIterator.next(AbstractIndexedListIterator.java :80)

java - 如何在android中清除Canvas?

android - 在对话框 fragment 选项选择上更新 fragment

android - 如何在 fragment 之间实现向后滑动?

Android - 对话框 fragment 宽度保持与父级匹配