Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/214.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 在onResume之前的片段事务期间,防止IllegalStateException的最佳方法是什么_Android_Android Fragments - Fatal编程技术网

Android 在onResume之前的片段事务期间,防止IllegalStateException的最佳方法是什么

Android 在onResume之前的片段事务期间,防止IllegalStateException的最佳方法是什么,android,android-fragments,Android,Android Fragments,在我的项目中,我只使用一个活动,所有的屏幕都是由片段实现的。我的活动只控制片段导航、权限处理、显示警报对话等。 我经常遇到这种情况。问题是,在上述所有情况下,如请求许可、显示警报等,活动和片段将转到onPause,如果在此操作之后立即转到另一个屏幕,这意味着如果执行片段事务,则立即执行,活动仍将处于onPause状态,并将导致崩溃。我必须等到活动进入恢复状态。 一个用例是,在启动屏幕中,我请求权限。在询问权限后,如果允许,我必须启动主屏幕,这是另一个片段。因此,在权限回调后要执行的下一个代码是一

在我的项目中,我只使用一个活动,所有的屏幕都是由片段实现的。我的
活动
只控制
片段
导航、权限处理、显示警报对话等。 我经常遇到这种情况。问题是,在上述所有情况下,如请求许可、显示警报等,
活动
片段
将转到
onPause
,如果在此操作之后立即转到另一个屏幕,这意味着如果执行
片段事务
,则立即执行,
活动
仍将处于
onPause
状态,并将导致崩溃。我必须等到
活动
进入
恢复
状态。 一个用例是,在启动屏幕中,我请求权限。在询问权限后,如果允许,我必须启动主屏幕,这是另一个片段。因此,在权限回调后要执行的下一个代码是一个片段事务,由于在
活动
上出现了请求权限的
对话框
,活动需要一些时间才能返回到
恢复
,因此我必须等待一段时间来执行
片段事务

当发生
onActivityResult
时,情况也是如此。 目前我正在做一个快速修复。我将一个runnable作为活动中的成员,它是片段事务runnable。我将尝试捕获一个
非法状态异常
,在
捕获
中,我将片段事务分配给Runnable。每次在活动
onResume
中,如果Runnable不是null,我只是在执行它。 对ActivityResult的
也进行了相同的修复。我将把结果保存在一个成员中,并在活动的
onResume
中传递给片段。 但我认为这不是一个好的做法。代码看起来也很难看,因为在活动中使用了这么多成员来处理此错误。
有什么好方法可以解决这个问题吗?

您可以通过提交状态丢失的片段事务来解决这个问题

supportFragmentManager.beginTransaction()
                      .replace(R.id.fragment_holder, new Fragment())
                      .commitAllowingStateLoss()

但是,如果您想保留片段的状态,则在调用
onSaveInstanceState
后不应执行片段事务。

请发布一些代码