您好,我有一个包含两个 fragment 的 Activity 。
- fragment A
fragment B
- fragment A 有一个 EditText 和一个 ListView。
- 一旦我在 EditText 中输入内容并按下 Enter,我就会填充 ListView。
- 现在 Fragment A 的 ListView 中填充了数据。
- 单击 fragment A 的 ListView 上的任何项目都会将用户转到 fragment B
- 此时我正在用 fragment B 替换 fragment A
- 因此,当用户点击后退按钮时,他会回到 fragment A
现在的问题是,如果用户在 fragment B 中并且不止一次发生屏幕旋转等配置更改,那么我的 ListView 为空,因为我的数组列表为空。
请注意,我在 fragment A 和 fragment B 中使用了 onSavedInstanceState。 如果我当前的 fragment 是 fragment A 并且发生了配置更改,那么就没有恢复状态的问题,因为在 onCreateView 中我从 bundle 中获取数组列表。
我知道当我从 fragment B 返回到 fragment A 时我的数组列表为 null 的原因, fragment A 之前在后台堆栈中。当 fragment A 在后台堆栈中时,唯一被调用的方法是 onSaveInstanceState 所以在第一个配置更改我的数组列表之后字段为空,因为我无法将存储在 savedInstateState 包中的数组列表分配给数组列表字段。
我不想在 list 中使用 android:configchanges 属性。
我的问题是如何恢复位于后台堆栈中的 fragment 的状态。
最佳答案
我通过将该 fragment 的所有详细信息传递给主要 Activity ,然后将其添加到后台堆栈并将状态保存在主要 Activity 的 savedInstance 状态中以及每当后台更改和前一个 fragment 时,实现了保留后台 fragment 状态的目标是可见的我正在将该 fragment 的已保存实例状态从主要 Activity 传递给它,这样我就保留了状态。我不确定这是否是正确的方法。
关于java - android 恢复在 backstack 中的 fragment 的实例状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30658669/