美文网首页
replace fragment引发Switch&SeekBar

replace fragment引发Switch&SeekBar

作者: 生猛咸鱼 | 来源:发表于2018-07-27 20:00 被阅读0次

    出现条件:

    1、Fragment为变量,不做状态保存

    2、Fragment中有2个以上的Switch或SeekBar

    3、2次进入


    现象(例子):

    Fragment中的两个Switch,第1个,会因第2个的控件状态而改变。

    原因:replace()调用的时候,该位置被替换的Fragment实例和视图都会被销毁,

    但是并不会立即被回收,所以如果在Activity中设置了该Fragment的变量,

     则该变量对应的实例对象还是旧的,但是整个显示的视图对象却已经是新的了。

    因此会被替换的Fragment对象一定不能作为变量存在,如果需要用到对象实例,

    可以使用findFragmentByTag获取实时对象,并且如果需要保存原先的实例,

     则还需要在onSaveInstanceState中保存需要保存的状态值。


    解决方案:

    1、控件使用post设置Switch或SeekBar的值,如:

    mSwitch.setChecked(mChecked);——》mSwitch.post(new Runnable() {

    @Override

        public void run() {mSwitch.setChecked(mChecked);}

    });

    2、Fragment用show/hide方式处理切换。

    相关文章

      网友评论

          本文标题:replace fragment引发Switch&SeekBar

          本文链接:https://www.haomeiwen.com/subject/objjbttx.html