【问题标题】:Save the state of a ToggleButton using SharedPreferences使用 SharedPreferences 保存 ToggleButton 的状态
【发布时间】:2016-05-05 20:21:19
【问题描述】:

我见过其他类似的问题,但都没有解决!我有一个切换按钮。即使应用程序关闭/重新打开,我也想保存 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));
}};

感谢您的帮助!

【问题讨论】:

    标签: android android-sharedpreferences android-togglebutton


    【解决方案1】:
    ToggleButton toggle1 = (ToggleButton) findViewById(R.id.toggle1);
    

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

    而且,它更容易使用

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

    【讨论】:

    • 很好,我将它放在 onCreate 中,就在 loadPreference 方法结束之后。它仍然无法正常工作......还有其他想法吗?
    【解决方案2】:

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

    公共类 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-06-09
      • 1970-01-01
      • 2021-06-11
      • 1970-01-01
      • 2018-09-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多