Android,如何保存Fragment的状态

Stack Overflow对此问题的讨论这里

Save state in fragment

在Fragment里面,利用onSaveInstanceState保存数据,并可在onActivityCreated里面恢复数据。

public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    ...
    if (savedInstanceState != null) {
        // Restore the fragment's state here
    }
}

public void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    // Save the fragment's state here
}

Save state in Activity

接下来重点是,在Activity里面,利用onSaveInstanceState保存Fragment实例的数据,并可在onCreate里面恢复数据。

private Fragment myFragment;

public void onCreate(Bundle savedInstanceState) {
    ...
    if (savedInstanceState == null) {
        // Instantiate fragment
    } else {
        // Restore the fragment's instance
        myFragment = getSupportFragmentManager().getFragment(
                    savedInstanceState, "fragment");
    }
    ...
}

@Override
protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    //Save the fragment's instance
    // fragment instance may be null
    if (myFragment != null) {
        getSupportFragmentManager().putFragment(outState, "fragment", myFragment);
    }
}

End

最后,不要忽略状态保存的问题,在内存不足或者系统限制比较苛刻的机器上面,都有可能出现Fragment或Activity被回收,比如经常出现拍照之后返回App,但App里面的数据被清空了,更常见的就是旋转屏幕,所以要保存好自己需要的数据。

转载请附上本文地址

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容