У меня есть флажок в моей деятельности. Мне интересно, как заставить его состояние оставаться неизменным (проверено/не проверено) каждый раз, когда я открываю приложение.
Вы можете использовать SharedPreferences для реализации CheckBox, который сохраняет свое состояние, даже если приложение закрыто.
Вот пример кода для сохранения состояния флажка, даже если приложение закрыто.
public class TestActivity extends Activity{
CheckBox checkBox = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
checkBox = (CheckBox) findViewById(R.id.my_check_box);
boolean isChecked = getBooleanFromPreferences("isChecked");
Log.i("start",""+isChecked);
checkBox.setChecked(isChecked);
checkBox.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton view, boolean isChecked) {
Log.i("boolean",""+isChecked);
TestActivity.this.putBooleanInPreferences(isChecked,"isChecked");
}
});
}
public void putBooleanInPreferences(boolean isChecked,String key){
SharedPreferences sharedPreferences = this.getPreferences(Activity.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putBoolean(key, isChecked);
editor.commit();
}
public boolean getBooleanFromPreferences(String key){
SharedPreferences sharedPreferences = this.getPreferences(Activity.MODE_PRIVATE);
Boolean isChecked = sharedPreferences.getBoolean(key, false);
return isChecked;
}
}
main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<CheckBox
android:id="@+id/my_check_box"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
checkBox.setChecked(true);
Если вы хотите получить последнее состояние, просто напишите проверяемое состояние в SharedPreferences
в onPause()
и получите состояние в onResume()
.
Ссылка: http://developer.android.com/reference/android/widget/CheckBox.html http://developer.android.com/reference/android/content/SharedPreferences.html
Ваш лучший вариант - реализовать SharedPreferences
в вашем приложении и сохранить его состояние. Когда вы запустите приложение, вы получите статус из настроек и установите/снимите флажок.
Чтобы запомнить состояние приложения, вы захотите использовать onSaveInstanceState()
и onRestoreInstanceState()
(см. Этот ответ для получения дополнительной информации), чтобы определить, нужно ли проверять или не проверять флажок...
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
super.onSaveInstanceState(savedInstanceState);
savedInstanceState.putBoolean("IsCheckboxChecked", _myCheckbox.isChecked());
}
@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
_myCheckbox.setChecked(savedInstanceState.getBoolean("IsCheckboxChecked"));
}
Лучше всего использовать SharedPreference. Вы можете использовать его следующим образом:
Сохраните текущее состояние в sharedpreference:
SharedPreferences sharedPreferences = getPreferences(MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit(); //opens the editor
editor.putBoolean("isChecked", true); //true or false
editor.commit(); //saves it in shared preference
то при запуске вашей активности вы можете проверить это значение в SharedPreference следующим образом:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.yourlayout);
SharedPreferences sharedPreferences = getPreferences(MODE_PRIVATE);
CheckBox checkBox = (CheckBox) findViewById(R.id.checkbox_id);
checkBox.setChecked(sharedPreferences.getBoolean("isChecked", false));
}
Надеюсь, вы сможете использовать эту информацию
Это аналогичная статья.. SO Qn Вы можете использовать те же идеи оттуда. Надеюсь это поможет.
_myCheckbox.setChecked
он применяет состояние к_myCheckbox.setChecked
.