您的位置:首页 > 移动开发 > Android开发

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

2016-03-23 19:49 766 查看
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<Bitmap>() {
@Override
public void call(Bitmap bitmap) {
mViewModel.setHeadImage(bitmap);
}
}, new Action1<Throwable>() {
@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);
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: