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);
}
}
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);
}
}
相关文章推荐
- Android官方开发文档Training系列课程中文版:支持不同的设备之支持不同的屏幕
- android学习之内存泄露(占位)
- Android课程---表格布局TableLayout
- TopAndroid
- android动画详解四 创建动画
- 深入理解Android(二):Java虚拟机Dalvik
- Android中文件存储笔记
- Android 蓝牙
- Android 对ScrollView滚动监听,实现美团、大众点评的购买悬浮效果
- Android Audio 框架简读 <1>
- 编译android源码apk是否生成odex方法
- 无法更新android sdk的问题解决
- android全屏,隐藏状态栏
- Android学习笔记-SQLite数据库实战
- android系统各版本新特性
- Android自定义控件系列案例【一】
- 47.Android View的加载过程 (转)
- android 之View 一
- Android Fragment 真正的完全解析(上)
- 破解Android或IOS游戏包时,将原本的黑白图(png文件),彩色图(jpg)文件,合成为一张png文件