您的位置:首页 > 其它

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 横竖屏