出現(xiàn)條件:
1、Fragment為變量,不做狀態(tài)保存
2、Fragment中有2個以上的Switch或SeekBar
3、2次進入
現(xiàn)象(例子):
Fragment中的兩個Switch,第1個,會因第2個的控件狀態(tài)而改變。
原因:replace()調(diào)用的時候,該位置被替換的Fragment實例和視圖都會被銷毀,
但是并不會立即被回收,所以如果在Activity中設(shè)置了該Fragment的變量,
?則該變量對應(yīng)的實例對象還是舊的,但是整個顯示的視圖對象卻已經(jīng)是新的了。
因此會被替換的Fragment對象一定不能作為變量存在,如果需要用到對象實例,
可以使用findFragmentByTag獲取實時對象,并且如果需要保存原先的實例,
?則還需要在onSaveInstanceState中保存需要保存的狀態(tài)值。
解決方案:
1、控件使用post設(shè)置Switch或SeekBar的值,如:
mSwitch.setChecked(mChecked);——》mSwitch.post(new Runnable() {
@Override
? ? public void run() {mSwitch.setChecked(mChecked);}
});
2、Fragment用show/hide方式處理切換。