首页 > 解决方案 > 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> itemsMyObject某种方式神奇地恢复了字段,但字段 likeotherThing仍然为空并且没有恢复。仅供参考,我没有items以任何方式明确保存和恢复。此外,onSaveInstanceStateinMyCustomFragment保持不变,也不会被 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?或者必须有其他原因导致这种行为。

标签: androidandroid-activityandroid-savedstate

解决方案


您需要覆盖 onRetainNonConfigurationInstance 方法。此方法可以帮助您存储数据

更多细节在这里


推荐阅读