无法传递结果ResultInfo:无效状态

时间:2018-11-14 00:44:08

标签: android android-fragments android-lifecycle accountpicker

在我的应用中,我有一个带有按钮的片段,要求用户使用本地Android AccountPicker选择帐户。

这是我的方法:

 Intent intent = AccountPicker.newChooseAccountIntent(null, null,
                new String[] {"com.google", "com.google.android.legacyimap"},
                false, null, null, null, null);
        startActivityForResult(intent, PICK_ACCOUNT);

问题是,如果在AccountPicker对话框仍显示时用户在整个应用程序背景下运行,则Fragment会分离并重新开始其生命周期,但是AccountPicker对话框仍然存在。

结果是,黑色背景顶部有一个AccountPicker对话框,继续进行AccountPicker不会执行任何操作。解散后,将重新创建该片段,因此用户必须再次通过AccountPicker。

我在片段的onCreate()中使用

setRetainInstance(true)

我的问题是:

  1. 为什么我的片段会在背景分离时分离并变成黑色,直到我关闭启动的AcountPicker为止?还有避免这种情况的“骇客”吗?
  2. 如果没有,是否可以用新的“片段”“重载”已启动的AccountPicker活动?

编辑:

发现了问题,改变了我最初的问题。所以这是怎么回事。我的片段正在使用AccountPicker来使用户帐户继续运行,没有选择的帐户,我的应用程序无法继续运行(我没有选择默认帐户)。当整个应用程序在后台运行且AccountPicker仍在运行时,我的主活动将终止其生命周期,并在此途中也将Fragment分离。但是,AccountPicker是堆栈顶部的一个单独的Activity,因此它不会被破坏,只是恢复。

我强迫我的Activity不能破坏自己,并且onStop()中的Fragment会被破坏,但是onSavedInstance()会在onStop()之前自动调用,并且我的Activity状态会被保存。这意味着我以后不能再发布Fragment事务,因为它将导致“ Lost State”错误。

因此,新问题是:如果我必须等待onActivtyResult()提交Fragment事务,是否可以避免在onStop()之前保存Activity状态?

0 个答案:

没有答案