Android Fragment 保存页面信息以及状态

1、Fragment实例化加载到Activity中之后,一般用replace或者add方法替换不会造成fragment被回收,即使fragment的生命周期从onAttach到onDettach走完。

2、所以可以在fragment类中保存页面的一些信息到成员变量中,在onViewCreate或者onActivityCreate中判断是否为空,不为空就直接用,为空就获取。这里指的是一些要耗时操作获取的信息。

3、在Fragment的生命周期中使用setArgue会报Fragment is actived的异常。

4、上面写的都是凭记忆写的

5、贴一段代码

if (mMainPageFragment == null) {
                mMainPageFragment = new MainPageFragment();
            }
            FragmentUtil.replace(MainActivity.this, R.id.container, mMainPageFragment);

@Override
    public void onAttach(Context context) {
        super.onAttach(context);
        initVariable(context);
    }

    private void initVariable(Context context) {
        if (mViewModel == null) {
            mViewModel = new MimeViewModel();
        }
    }

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        mBinding = DataBindingUtil.inflate(inflater, R.layout.fragment_mime, container, false);
        mBinding.setViewModel(mViewModel);
        mBinding.setFragment(this);
        return mBinding.getRoot();
    }

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        initLayout();
    }

    private void initLayout() {
        if (mViewModel.getHeadImage() == null) {
            Subscription sub1 = DBModel.getInstance()
                    .obtainBitmap(mActivity, "head_image")
                    .observeOn(AndroidSchedulers.mainThread())
                    .subscribe(new Action1() {
                        @Override
                        public void call(Bitmap bitmap) {
                            mViewModel.setHeadImage(bitmap);
                        }
                    }, new Action1() {
                        @Override
                        public void call(Throwable throwable) {
                            Drawable drawable = ContextCompat.getDrawable(mActivity, R.drawable.gaven);
                            BitmapDrawable bd = (BitmapDrawable) drawable;

                            mViewModel.setHeadImage(bd.getBitmap());
                        }
                    });
            mSubscriptionList.add(sub1);
        }

    }


你可能感兴趣的:(Android Fragment 保存页面信息以及状态)