当前位置: 首页 > 知识库问答 >
问题:

所有在后台的碎片,在旋转后的onSaveInstanceState中都有空值

松旭
2023-03-14

旋转设备后,我们在Backback或fragmentSupportManager中的任何片段都会激活onSaveInstanceState。

但是,在第一次旋转之后,内部的所有内容都为null(所有变量),应用程序会因null指针异常而崩溃。

我想知道为什么如果片段实际上被销毁为零(所有值都为null),为什么片段仍然存在,并且调用onSaveInstanceState?

我的代码很深,有多个基类,presenter类可以从片段中提取大量代码。我也只使用一个活动和fragmentTransaction。代替

如果人们需要,我可以添加代码,但是有很多!我希望有一些明显的或是我不理解的东西,关于backbackback的工作方式/保留它的片段。

我看过的那些没有帮助的链接是

是否会对后堆栈中的片段调用onSaveInstanceState
一劳永逸,如何正确保存后栈中片段的实例状态
使用onSaveInstanceState和Backback中的片段
回退碎片旋转时为空
在回退中保存碎片状态

共有1个答案

慕容弘懿
2023-03-14

我也有同样的问题。假设我有碎片A,当我从碎片A到碎片B时,调用碎片B,碎片A存在于背面并且没有显示。在Frag B中,在第一次旋转时,正在为Frag a调用onSavedInstanceState(),它工作正常,因为后堆栈上的Frag a存在,并且所有数据都在那里。。当我在Frag B中再次旋转设备时,出于未知原因再次调用Frag AonSavedInstanceState()。。在这些调用之间,由于Frag a不可见,因此未调用onCreateView,因此从未发出还原。它为什么这样做我没有线索。

我要做的是检查Bundle是否为空(第二次旋转后Bundle确实存在,它只是空的),如果是,我尝试从头开始重新创建Frag,这意味着从请求重新加载新数据。。。这不是最好的解决办法。。

 类似资料:
  • 我有一个片段,在这里我调用自定义视图类(Dragger) 并且我有另一个片段与和适配器,在其中我调用方法通过主机的活动的。 我发现在中旋转后会获得新的引用,但当我从适配器调用时-为空。 我真的不明白为什么字段得到引用,然后又丢失了它) 有人知道这有什么不对吗? 提前谢谢! P. S.:主机活动

  • 我有大约20个活动,扩展了基础活动,反过来扩展了activity。现在,我的要求是将包括BaseActivity在内的所有这些活动转换成片段。任何支持都将不胜感激。下面是我的应用程序的示例代码。

  • 我有一个活动A,它调用fragment Bf,它调用fragment Cf。我希望在调用Cf时将Bf放置在Backback中,以便用户可以导航回它。然而,如果在Cf中按下特定按钮,我希望Bf从Backback中删除。这可能吗? 我看到有一个popBackStack()函数。然而,我有点困惑这将如何工作。使用此功能安全吗?是否有可能在Backback上的Bf之后插入来自不同应用程序的活动? 此外,是

  • 我有一个带标签的活动。为了创建选项卡,我使用了片段并使用以下适配器类: 以下是我在活动中所做的。(剥离下来,为了清晰起见,去掉了无关的碎片)。 一切都很好,除了屏幕旋转的时候。应用程序在onCreateView中有对象变量的片段中崩溃,结果发现该片段的每个成员都是null,所以我收到一个NullPointerException。这很奇怪,因为当屏幕旋转,从而重新创建活动时,我会再次创建新的片段,设

  • 我想一起旋转一组精灵,多边形和矩形,图a)显示2个精灵,边界多边形和矩形,这组围绕大矩形中心旋转90度(两个矩形的联合)。 以下代码创建图b)。它不会围绕联合矩形的中心旋转精灵和多边形。 下面的代码创建了图c)。当我试图将精灵和多边形移动到矩形位置时,出现了对齐错误。 问题是旋转后如何将精灵与矩形对齐(即类似于图a,角度=0)。提示:问题出现是因为精灵在绘制时会旋转,因此精灵和矩形之间会错位对齐。

  • 问题内容: 我是Android开发的新手。我有一个问题。我尝试了最后几个小时,但我无法弄清楚。如果是这样,我有一个很普遍的问题。IllegalStateException:使用ViewPager在onSaveInstanceState之后无法执行此操作,但由于缺少Android开发经验而失败。 这是代码: 这是错误: 位于android.os.Handler.dispatchMessage(Han