2016-11-28 6 views
0

Так что в основном у меня есть переключатель в фрагменте, дело в том, что если я его проверю (правда), всякий раз, когда я переключаюсь на другой фрагмент, а затем «возвращаюсь», состояние не сохраняет, и я должен проверить его снова, то, что я хочу сделать, это кнопка переключения, чтобы запомнить ее состояние даже после переключения фрагментов. Спасибо, надеюсь, кто-то поможет.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

Вы можете взять статическое логическое значение, которое будет установлено в истинное или ложное соответственно состояние Toogle коммутатора. И при создании представления фрагмента вы можете применить условие, что если boolean b (скажем) false, то Switch.setChecked (b).

+0

Я думаю, что это не должно быть static, так как в этом случае каждый экземпляр класса фрагмента, так что в принципе любой фрагмент будет иметь одно и то же значение, что может быть нежелательно. Другой мудрый да, логический код в вашем коде, чтобы сохранить состояние флажка, вероятно, ваш более легкий путь вокруг него. – jrsall92

+1

Да, я думаю, я ошибаюсь. SharedPref был бы предпочтительным способом сделать это. – pawar

1

Я бы не стал использовать статические значения как можно больше, чтобы ценность могла пережить жизненный цикл приложения. Я бы поставил логическое значение в SharedPreference и получить его обратно onCreateView из Fragment, как это:

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

где мой код должен помещать эту строку: boolean default = sharedPref.getBoolean ("switchValue", false); внутри фрагмента тоже? –

+0

Я бы сказал в 'onCreateView' вашего фрагмента, затем сделайте cocina.setChecked (по умолчанию), перед установкой' setOnCheckedChangeListener' – Jaythaking

Смежные вопросы