程序关闭时如何使复选框保持检查状态?

时间:2014-07-03 17:23:56

标签: java android checkbox

在我的程序中,我有大约20个复选框,但是当我检查它们并关闭程序然后返回复选框时,它们总是未经检查,如何让复选框记住保持检查状态。

4 个答案:

答案 0 :(得分:2)

在onPause函数中,将状态写入文件或SharedPreference。在onResume中,读取该文件/ Preference并设置复选框。您可能希望查看PreferenceActivity以便为您执行此操作。

答案 1 :(得分:2)

您可以使用SharedPreferences执行此操作。

首先,当您的应用程序转到onPause时,您希望将每个复选框的状态存储在SharedPreferences中:

SharedPreferences prefs = this.getSharedPreferences("com.example.myapp", Context.MODE_PRIVATE);
prefs.putBoolean("checkbox1", checkbox1.isChecked()).commit();
// do this for all 20

然后,您可以选中onResumeonCreate

复选框
checkbox1.setChecked(prefs.getBoolean("checkbox1", false));

答案 2 :(得分:2)

您应该考虑使用Shared Preferences

SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);

写入共享首选项:

SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPref.edit();
editor.putInt(getString(R.string.saved_high_score), newHighScore);
editor.commit();

从共享首选项中读取

SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
int defaultValue = getResources().getInteger(R.string.saved_high_score_default);
long highScore = sharedPref.getInt(getString(R.string.saved_high_score), defaultValue);

此处有一个非常简单的tutorial来实现它们。

请求的示例代码:

主要活动类:

package com.zeus.example;

import android.app.Activity;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.widget.CheckBox;

public class MainActivity extends Activity {

CheckBox chkBox1, chkBox2;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    chkBox1 = (CheckBox) findViewById(R.id.checkBox1);
    chkBox2 = (CheckBox) findViewById(R.id.checkBox2);

    SharedPreferences getPrefs = 
            PreferenceManager.getDefaultSharedPreferences(getBaseContext());

    boolean value = getPrefs.getBoolean("checkbox_preference", true);
    chkBox1.setSelected(value); // Setting the value reflected from the preference
    chkBox2.setSelected(!value); // Setting the value opposite of the preference(Just an example)
}
}

偏好活动类:

package com.zeus.example;

import android.os.Bundle;
import android.preference.PreferenceActivity;

public class Prefs extends PreferenceActivity{

    @SuppressWarnings("deprecation")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
       // TODO Auto-generated method stub
       super.onCreate(savedInstanceState);
       addPreferencesFromResource(R.xml.settings);
   }
}

设置XML:

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen
        xmlns:android="http://schemas.android.com/apk/res/android">
        <CheckBoxPreference
               android:key="checkbox_preference"
               android:defaultValue="false"
              android:title="CheckBox1"
        />
</PreferenceScreen>

虽然这种方法很简单,但已被弃用,建议改为使用偏好片段

答案 3 :(得分:1)

使用SharedPreferences。永远存储小值的最简单方法。

由于您有多个复选框,请使用SharedPreferences.Editor putStringSet (String key, Set<String> values)

您可以使用putStringSetSimpleSharedPreferences mPreferences = new SimpleSharedPreferences(getApplicationContext()); //Init. mPreferences.putStringSet("STRING_SET_KEY", mStringSet); //Single Line mPreferences.getStringSet("STRING_SET_KEY", null); // Get String set. mPreferences.putBoolean("INTEGER_BOOL", true); //Just an example. 反向移植到API-1。

用法:无编辑,无提交。

{{1}}

注意:我是SimpleSharePreferences的作者。