Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/216.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android:将frament添加到活动时出错_Android_Android Fragments_Android Activity_Fragmentmanager - Fatal编程技术网

Android:将frament添加到活动时出错

Android:将frament添加到活动时出错,android,android-fragments,android-activity,fragmentmanager,Android,Android Fragments,Android Activity,Fragmentmanager,android上有一些我非常讨厌的特性 关于活动的isFinishing()的问题是最严重的。 我确实理解在此过程之后或过程中不允许采取某些行动,但我们必须检查的唯一方法是使用这种方法,有时这种方法无效。让我举一个非常简单的例子,并请指导我如何使用最佳实践解决此问题: 我想在我的屏幕上添加一个片段 if(!this.isFinishing() && getSupportFragmentManager().findFragmentByTag(VerifyIdentityDialog

android上有一些我非常讨厌的特性

关于活动的
isFinishing()
的问题是最严重的。
我确实理解在此过程之后或过程中不允许采取某些行动,但我们必须检查的唯一方法是使用这种方法,有时这种方法无效。让我举一个非常简单的例子,并请指导我如何使用最佳实践解决此问题:

我想在我的屏幕上添加一个片段

if(!this.isFinishing() && getSupportFragmentManager().findFragmentByTag(VerifyIdentityDialog.CHALLENGE_DIALOG_TAG) == null)
try {
      new VerifyIdentityDialog((ChallengeRequiredException) e, new DefaultVerifyIdentityListener())
              .show(getSupportFragmentManager(), VerifyIdentityDialog.CHALLENGE_DIALOG_TAG);
  } catch (Exception e1) {
      Crashlytics.logException(e1);
  }
此代码仅在
main线程上运行
它会在尝试之前明确检查活动是否已完成,但仍有大约2%的用户在其上运行异常

例外情况是:

java.lang.IllegalStateException
Can not perform this action after onSaveInstanceState
[避免粘贴长堆栈跟踪,因为它是默认的android异常,上面提到了相关代码]

1-在我添加
之前!this.isFinishing()
在if中,异常更加频繁,但仍然无法100%解决 2-根据Crashlytics,当它出现时,97%都在后台,所以我认为代码开始,用户进入后台,然后它简单地崩溃

问题是。。。
正确的解决方法是什么。。。我讨厌捕捉可预测情况的异常

您可以通过直接检查FragmentManager是否已保存其状态-如果未保存状态,您应该只显示对话框