0

我见过其他类似的问题,但没有一个解决问题!我有一个切换按钮。即使应用程序关闭/重新打开,我也想保存 ToggleButton 的状态(检查真或假)。

我的代码如下所示,但它不会运行

公共类 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));
}};

谢谢您的帮助!

4

2 回答 2

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

应该是 INSIDE onCreate(),使它成为最后一个语句。

此外,它更易于使用

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(MainActivity.this);
于 2016-05-05T20:22:48.853 回答
1

好的,我有答案以供将来参考。我最初的尝试没有正确使用共享首选项。您必须为共享首选项对象创建一个“键”和一个“名称”。然后在代码中调用如下:

公共类 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);
}

}

于 2016-05-20T16:43:53.853 回答