Fragement横竖屏切换时保存状态
2017-06-21 14:02
791 查看
问题:前几天遇到个问题,手机设置---时区中,选择时区列表,选择按字母排列时区,然后横屏,还是以时区显示的状态
问题原因:看了一下代码,实际上就是Fragment横竖屏切换时候的状态保存问题,fragment生命周期在横竖屏切换时会从onCreateView开始重新新建fragment页面,所以之前的状态没有做保存的话还是现实初始化的效果
解决方法:
1.首先想到的是sharedpreferences来存储,
//持久化存储数据
pref = this.getActivity().getSharedPreferences("second", Context.MODE_PRIVATE);
//获取SharedPreferences.Editor对象
editor = pref.edit();
this.getActivity()是必须写的,因为fragment是依附activity的,另外,第二个参数要加Context,否则会报错
2.参考网上例子, 复写onSaveInstanceState方法来存储状态
第一步:声明一个状态值private boolean IS_MENU_TIMEZONE = true;
@Override
public void onSaveInstanceState(Bundle outState){
outState.putBoolean("is_sort_timezone", IS_MENU_TIMEZONE);
}
一定要注意,要存储到Bundle对象中(这里是outState),不要另外写其他东西
第二步:
在fragment的onActivityCreated()方法中调用bundle对象中的状态值,修改状态。有人会问为什么不是onCreateView时调用?因为:只有fragment所在的Activity 被调用时onActivityCreated()方法才会被回调,onCreateView只是创建和绘制view,和Activity没有关联
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
....
if(savedInstanceState!=null){
IS_MENU_TIMEZONE = savedInstanceState.getBoolean("is_sort_timezone", IS_MENU_TIMEZONE);
}
注:第一次写博客,看起来很乱,主要为了试试水,有不对的地方欢迎指导,谢谢~
问题原因:看了一下代码,实际上就是Fragment横竖屏切换时候的状态保存问题,fragment生命周期在横竖屏切换时会从onCreateView开始重新新建fragment页面,所以之前的状态没有做保存的话还是现实初始化的效果
解决方法:
1.首先想到的是sharedpreferences来存储,
//持久化存储数据
pref = this.getActivity().getSharedPreferences("second", Context.MODE_PRIVATE);
//获取SharedPreferences.Editor对象
editor = pref.edit();
this.getActivity()是必须写的,因为fragment是依附activity的,另外,第二个参数要加Context,否则会报错
2.参考网上例子, 复写onSaveInstanceState方法来存储状态
第一步:声明一个状态值private boolean IS_MENU_TIMEZONE = true;
@Override
public void onSaveInstanceState(Bundle outState){
outState.putBoolean("is_sort_timezone", IS_MENU_TIMEZONE);
}
一定要注意,要存储到Bundle对象中(这里是outState),不要另外写其他东西
第二步:
在fragment的onActivityCreated()方法中调用bundle对象中的状态值,修改状态。有人会问为什么不是onCreateView时调用?因为:只有fragment所在的Activity 被调用时onActivityCreated()方法才会被回调,onCreateView只是创建和绘制view,和Activity没有关联
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
....
if(savedInstanceState!=null){
IS_MENU_TIMEZONE = savedInstanceState.getBoolean("is_sort_timezone", IS_MENU_TIMEZONE);
}
注:第一次写博客,看起来很乱,主要为了试试水,有不对的地方欢迎指导,谢谢~
相关文章推荐
- 视频播放以及横竖屏切换保存播放状态
- 保存Activity的状态(切换横竖屏时)
- ListView 在设备切换横竖屏时保存状态
- Android Activity的横竖屏切换与状态保存
- android 的数据状态保存,横竖屏切换时的操作
- Android使用Fragment来实现TabHost的功能(解决切换Fragment状态不保存)以及各个Fragment之间的通信
- 【Android】保存Fragment切换状态
- Android使用Fragment来实现TabHost的功能(解决切换Fragment状态不保存)以及各个Fragment之间的通信
- [Android疑难杂症]Gallery默认和横竖屏切换选中状态问题(2.3、2.3系统存在)
- 横竖屏切换保存数据
- 【Android】保存Fragment切换状态
- Android使用Fragment来实现TabHost的功能(解决切换Fragment状态不保存)以及各个Fragment之间的通信
- Android编程之横屏竖屏切换及状态保存
- Android横竖屏切换数据保存的方法以及onSaveInstanceState() 的实现
- Android使用Fragment来实现ViewPager的功能(解决切换Fragment状态不保存)以及各个Fragment之间的通信
- android 横竖屏切换与数据保存
- 【Android】保存Fragment切换状态
- Android 保存Fragment 切换状态实例代码
- android: 横竖屏切换总结-布局改变和数据保存
- Android组件:Fragment切换后保存状态