在我的程序中,我有大约20个复选框,但是当我检查它们并关闭程序然后返回复选框时,它们总是未经检查,如何让复选框记住保持检查状态。
答案 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
然后,您可以选中onResume
和onCreate
:
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)
您可以使用putStringSet
将SimpleSharedPreferences 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的作者。