Сохраните состояние ToggleButton с помощью SharedPreferences.

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

Мой код выглядит так, как показано ниже, но он не запускается

открытый класс 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));
}};

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


person GBMo    schedule 05.05.2016    source источник


Ответы (2)


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

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

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

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(MainActivity.this);
person Alexander Kulyakhtin    schedule 05.05.2016
comment
Очень хорошо, я поместил его внутрь onCreate сразу после окончания метода loadPreference. Это все еще не работает... есть другие мысли? - person GBMo; 05.05.2016

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

открытый класс 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);
}

}

person GBMo    schedule 20.05.2016