2016-11-28 20 views
0

所以基本上我在片段中有一個togglebutton,事情是,如果我檢查它(真),每當我切換到另一個片段,然後「回來」,狀態不保存,我必須再次檢查它,我想要做的是切換按鈕來記住它的狀態,即使在切換片段之後。 謝謝,希望有人幫助。ToggleButton在切換片段時改變狀態

下面是代碼:

cocina.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 
     @Override 
     public void onCheckedChanged(CompoundButton compoundButton, boolean isChecked) { 

      if(isChecked){ 

       ((MainActivity)getActivity()).on2(); 



       Toast.makeText(getActivity(),"On",Toast.LENGTH_SHORT).show(); 
      } 

      else{ 
       ((MainActivity)getActivity()).off2(); 

       Toast.makeText(getActivity(),"Off",Toast.LENGTH_SHORT).show(); 
      } 
     } 
    }); 

回答

0

你可以把一個靜態布爾其值將被設置爲true或false相應的的toogle開關的狀態。在創建片段視圖時,可以應用條件,如果布爾值b(比如說)爲false,則Switch.setChecked(b)。

+0

,我認爲它不應該在這種情況下,每個片段類的實例都是靜態的,所以基本上任何片段都將共享相同的值,這可能不是所希望的。其他明智的是,在你的代碼中保存複選框狀態的布爾值可能是你更簡單的方法。 – jrsall92

+1

是的,我想我錯了。 SharedPref將是執行此操作的首選方式。 – pawar

1

我會盡量避免使用靜態值,以便值可以在應用程序生命週期中存活。我把布爾值SharedPreference和檢索它放回Fragment這樣的onCreateView

SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE); 
SharedPreferences.Editor editor = sharedPref.edit(); 


cocina.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 
    @Override 
    public void onCheckedChanged(CompoundButton compoundButton, boolean isChecked) { 

     if(isChecked){ 
      editor.putBoolean("switchValue", true).commit(); 
      Toast.makeText(getActivity(),"On",Toast.LENGTH_SHORT).show(); 
     } 

     else{ 
      editor.putBoolean("switchValue", false).commit(); 
      Toast.makeText(getActivity(),"Off",Toast.LENGTH_SHORT).show(); 
     } 
    } 
}); 

,每當你需要它來檢索值:

SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE); 
boolean default = sharedPref.getBoolean("switchValue", false); 
+0

我的代碼應該放在這一行:布爾值默認= sharedPref.getBoolean(「switchValue」,false); ?片段內呢? –

+0

我會在你的Fragment的'onCreateView'中說,然後在設置'setOnCheckedChangeListener'之前做cocina.setChecked(默認) – Jaythaking