replace fragment引发Switch&SeekBar刷新异常

出现条件:

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方式处理切换。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 窗外阳光看似暖阳,墙上的字画却被吹得舞步跳跃,我看着窗外树木的凋谢,幻想着寒冬过去的盛宴。 听说天上每一颗闪耀的...
    于是lin阅读 166评论 0 0
  • PS是由Adobe Systems开发和发行的,它主要用于对图形的处理,也就是说主要处理已像素所构成的数字图像。...
    GRX喵咪阅读 965评论 0 1
  • 17/03/20 第一期 奇葩大会:观念分享集结会 傅首尔:知识分子要活的有烟火气,我觉得知识分子的典型代表是肖骁...
    知鱼君阅读 971评论 0 3

友情链接更多精彩内容