0

Я видел другие подобные вопросы, но ни один из них не работает! У меня есть кнопка переключения. Я хочу сохранить состояние ToggleButton (проверено true или false), даже когда приложение закрыто/открыто.Сохранение состояния ToggleButton с использованием SharedPreferences

Мой код выглядит следующим образом ниже, но это не будет работать

общественного класса MainActivity расширяет AppCompatActivity {

ToggleButton toggle1 = (ToggleButton) findViewById(R.id.toggle1); 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
} 
private void savePreference(Context context) 
{ 
    SharedPreferences.Editor editor = context.getSharedPreferences("toggleState1", 0).edit(); 
    editor.putBoolean("toggleState1", toggle1.isChecked()); 
    editor.commit(); 
} 

private void loadPreference (Context context) 
{ 
    SharedPreferences prefs = context.getSharedPreferences("toggleState1", 0); 
    toggle1.setChecked(prefs.getBoolean("toggleState1", false)); 
}}; 

Спасибо за помощь!

ответ

1
ToggleButton toggle1 = (ToggleButton) findViewById(R.id.toggle1); 

должен быть ВНУТРИ onCreate(), сделать это последнее утверждение.

Кроме того, проще в использовании

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(MainActivity.this); 
+0

Очень хорошо, что я поместил его в OnCreate только после того, как в конце метода loadPreference. Он все еще не работает ... какие-то другие мысли? – GBMo

0

Хорошо у меня есть ответ для дальнейшего использования. Моя первоначальная попытка не использовала общие предпочтения должным образом. Вы должны создать «ключ» и «имя» для общего объекта предпочтения. Затем вызовите его в коде следующим образом:

общественного класса MainActivity расширяет AppCompatActivity {

private static final String APP_SHARED_PREFERENCE_NAME = "AppSharedPref"; 
private final static String TOGGLE_STATE_KEY1 = "TB_KEY1"; 
ToggleButton toggle1; 
SharedPreferences sharedPreferences; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    sharedPreferences = getSharedPreferences(APP_SHARED_PREFERENCE_NAME, Context.MODE_PRIVATE); 
    toggle1 = (ToggleButton) findViewById(R.id.toggle1); 
    toggle1.setChecked(GetState()); 
    toggle1.setOnCheckedChangeListener(new OnCheckedChangeListener() { 

     @Override 
     public void onCheckedChanged(CompoundButton arg0, boolean isChecked) { 
      SaveState(isChecked); 
     } 
    }); 
} 

private void SaveState(boolean isChecked) { 
    SharedPreferences.Editor editor = sharedPreferences.edit(); 
    editor.putBoolean(TOGGLE_STATE_KEY1, isChecked); 
    editor.commit(); 
} 

public boolean GetState() { 
    return sharedPreferences.getBoolean(TOGGLE_STATE_KEY1, false); 
} 

}

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