2016-11-28 22 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