android - Android是否会自动保存和恢复某些字段的实例状态?
问题描述
我有一个带有 MyItem 的 RecyclerView 来保存 RecyclerView 中每一行的数据,并且一切都已正确实现并且工作正常。
public class MyAdapter extends RecyclerView.Adapter<MyViewHolder>{
protected final List<MyItem> items= new ArrayList<>();
public MyAdapter (List<RVItem> list) {
if (list != null) {
items.addAll(list);
}
}
}
并且列表项是从另一个对象传递的。
public class MyObject{
private String otherThing;
private List<MyItem> items;
public someMethodToInitItems() {
items = new ArrayList<>();
items.add(...);
items.add(...);
}
public createFragment() {
Fragment f = new MyCustomFragment();
f.setAdapter(new MyAdapter(items));
// replace commit fragment...
}
}
这里的问题是,当我的 Activity 恢复时,private List<MyItem> items
以MyObject
某种方式神奇地恢复了字段,但字段 likeotherThing
仍然为空并且没有恢复。仅供参考,我没有items
以任何方式明确保存和恢复。此外,onSaveInstanceState
inMyCustomFragment
保持不变,也不会被 super 覆盖。
下面是我如何尝试从 Activity 保存和恢复 Fragment 状态。而已。
public class MyActivity{
@Override
public void onSaveInstanceState(@NonNull Bundle outState) {
super.onSaveInstanceState(outState);
getSupportFragmentManager().putFragment(outState, tag, getLastFragment());
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if(savedInstanceState != null) {
Fragment fg = getSupportFragmentManager().getFragment(savedInstanceState, tag);
}
}
}
所以,我不明白。Android系统做这个工作吗?items
自动保存和恢复字段MyObject
?或者必须有其他原因导致这种行为。
解决方案
您需要覆盖 onRetainNonConfigurationInstance 方法。此方法可以帮助您存储数据
更多细节在这里
推荐阅读
- ionic-framework - 构建后,Ionic 在 Android 上的初始屏幕后显示空白屏幕
- python - Gekko 非线性优化,约束函数评估 if 语句中的对象类型错误
- aspnetboilerplate - 使用不同文化时绑定 DateTime 和小数的问题
- c# - 如何使用 LINQ 从地图内的列表中选择?
- css - 如何使用默认选定元素创建 css 'nav'
- python - 如何使用rpy2在R识别为空的熊猫中创建空单元格?
- java - JsonParseException:无法识别的令牌“未经授权”:期待(“真”、“假”或“空”)
- java - 无法找到下拉菜单的元素(写在引导程序中)
- ms-word - 如何使用 Office Web 插件中的函数文件在浏览器窗口中打开外部链接?
- php - 将 POST 数组插入到 mySql 表的多行中的问题