如何在活动中maintain
CheckBox state
我在FirstActivity.java
中检查了一个CheckBox,但是当我从任何其他活动move back
到 FirstActivity.java 时,来自SecondActivity.java
..
然后,我是not getting my CheckBox as check
我之前检查过的。
使用onSaveInstanceState
& onRestoreInstanceState
,请参阅以下完整代码: -
public class FirstActivity extends Activity {
CheckBox cb1;
Button btnNext;
private boolean boolCheck1 = false;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
cb_cb1 = (CheckBox) findViewById(R.id.cb1);
btnNext = (Button) findViewById(R.id.btnNext);
// control status of body frame checkboxes
cb1.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
// TODO Auto-generated method stub
if(isChecked){
}
}
});
btnNext.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
startActivity(intent);
}
});
}
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
super.onSaveInstanceState(savedInstanceState);
savedInstanceState.putBoolean("Enable", cb1.isChecked());
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
boolCheck1 = savedInstanceState.getBoolean("Enable");
}
}
答案 0 :(得分:4)
您最好的选择是使用sharedPreferences
。
在checkbox
所在的活动中,在onCreate()
中填写以下内容:
SharedPreferences pref = getApplicationContext().getSharedPreferences("MyPref", 0); // 0 - for private mode
Editor editor = pref.edit();
然后,在intent
转到其他活动,或“保存”button
或其他任何内容,请使用以下内容:
editor.putBoolean("checkbox", yourCheckbox.isChecked());
editor.commit(); // commit changes
现在,设置已保存。
当您回到自己的活动时,请在onCreate
:
if (pref.getBoolean("checkbox", false) == true){ //false is default value
yourCheckbox.setChecked(true); //it was checked
} else{
yourCheckbox.setChecked(false); //it was NOT checked
}
您可以阅读更多here。
希望这有帮助
答案 1 :(得分:1)
使用SharedPreferences或SQLiteDatabase存储复选框的值,您可以在从Database
或SharedPreference
抓取后使用它。
如果您使用onSaveInstanceState
&当用户关闭应用并且应用不再位于onRestoreInstanceState
时,Memory
所有引用都会清除。
答案 2 :(得分:0)
要跨活动维护状态,您必须使用SharedPreferences或数据库。在您的情况下,SharedPreferences是最佳选择
你使用过OnSavedInstance它只保存实例,直到活动没有被销毁,即它仍然在堆栈上。
检查activity lifecycle以了解有关活动何时销毁的详情。
对于每个复选框,您可以将其值存储在sharedPreference中 onCreate()你的活动你应该检查复选框 到sharedPreference值
以下是使用共享首选项的方法
SharedPreferences prefs= context.getSharedPreferences("myPrefs", 0);
SharedPreferences.Editor editor = prefs.edit();
editor.putBoolean("checkbox1", true);//true if checked
editor.commit();
// get stored value , if no value is stored then assume its false
prefs.getBoolean("checkbox1", false);