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

SavedInstanceState在片段中始终为空

庄浩言
2023-03-14

我使用XML(和活动中的setContentView())将一个片段附加到活动中。A有一个问题,因为我的片段中有非常动态的视图,所以当方向改变时,我必须恢复视图的所有状态。

public void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        outState.putBoolean("restore", true);
        outState.putInt("nAndroids", 2);
   }

我不是Android系统中的一个noob,但现在我很生气,因为这个问题...

public void onViewCreated(View view, Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);

    if (savedInstanceState == null) {
        //smth
    } else {
        // smthelse THIS IS NEVER REACHED BECAUSE BUNDLE IS ALWAYS NULL
    }

    getListView().setDivider(getResources().getDrawable(R.drawable.list_divider));
}

共有1个答案

宫高义
2023-03-14

所有的问题都在于我没有为XML中的片段声明Android:id。Android需要ID或标签来识别存储的片段,并复制其中的所有元素。所以伙计们,记住-每个片段的实例都需要唯一的id或标签!

此外,当声明setRetaInstance(true)时,bundle应该始终返回null。

 类似资料:
  • 我有两个不同的活动,在第一个活动中,我在一些EditText中输入一些信息,然后进入第二个活动,但当我返回时,第一个活动中EditText上的文本消失了。 以下是第一个活动的OnCreate() 我正在使用onSaveInstanceState方法保存信息 在进行调试时,我可以看到确实在onSaveInstanceState方法中填充了savedInstanceState捆绑包,但在OnCreat

  • 我有亲子活动。父活动将自定义状态存储在onSaveInstanceState中(super.onSaveInstanceState是在所有需要的项目打包到bundle中之后调用的),然后在onCread中读取状态,但是出于某种原因,SavedInstanceState总是为空。 以下是父活动的日志事件序列:onPause- 我对这个问题有点不清楚——请告诉我我可能错过了什么。 谢谢

  • 问题内容: 我尝试@Inject这样的字段(它是一个jar模块,在META-INF下存在空bean.xml): IDataProvider接口 数据提供者实现import javax.enterprise.context.ApplicationScoped; 我尝试注入DataProvider的类 如果我在Wildfly上运行此命令,则注入的dataProvider始终为null(DataCont

  • 我的代码中有以下工作流程。我有,它启动一个新的使用starActivityForResult(意图,请求代码)。活动B有一个片段,比如,它包含一个listview(它的适配器有一个arraylist)和下面的编辑文本,可以将新值添加到listview中。 我打算将数据发送回。我在中实现了一个接口,该接口在同一片段的onPause()方法中调用。 子任务是在“编辑文本”中从“添加”按钮添加新项时更新

  • 问题内容: 我正在使用带有底部导航视图的简单应用程序。我有3个带有文本的片段,我想在Botton Navigation中选择一个项目时启动它们,但是我不知道在MainActivity.java中写什么。所有片段都具有.xml布局和.java。我搜索了一些代码,写了代码,搜索了视频,但没有成功。 我正在学习Fragments和UI Dynamic,因此我在Android Studio中使用“底部导航

  • 让我们称它们为片段A和B。片段B只是A的一个详细视图,它在点击片段A中的按钮时替换了片段A。 更换代码: 当我现在旋转片段B中的屏幕一次并按下后,旧片段A会毫无问题地恢复(它在由savedInstanceState包创建的OnActivityCreate中恢复其状态)。 现在到了有趣的部分... 当我在片段B中多次旋转屏幕并按下Back键时,我得到一个NullPointerException,因为

  • 可以使用保存删除片段时的状态,然后在将片段弹出后堆栈时恢复状态吗?当我从后堆栈还原片段时,savedInstanceState包始终为空。 现在,应用程序流程是:创建的片段->删除的片段(添加到后堆栈)->从后堆栈恢复的片段(savedInstanceState包为空)。 下面是相关代码: 我认为问题是在被移除和添加到后堆栈时从未被调用。如果我不能使用onsavedInstanceState(),

  • 问题内容: 我正在创建一个新的Laravel项目,并且在调试表单请求的错误时,我注意到我的ErrorBag始终为空。即使在控制器返回时。我尝试了在互联网上找到的所有解决方案,但没有任何效果。 创建与作曲家新的项目,即使(如描述这里)使所有的字段为空时,我的开箱身份验证系统中有一个空的错误袋。 是的,所有路由都使用中间件组网络。 有什么想法导致此问题吗?(Session :: put()和Sessi