Как сделать так, чтобы флажок оставался в том же состоянии каждый раз, когда я открываю свое приложение?

1

У меня есть флажок в моей деятельности. Мне интересно, как заставить его состояние оставаться неизменным (проверено/не проверено) каждый раз, когда я открываю приложение.

Теги:

6 ответов

5
Лучший ответ

Вы можете использовать SharedPreferences для реализации CheckBox, который сохраняет свое состояние, даже если приложение закрыто.

  • Когда пользователь проверяет/отменяет CheckBox. Сохраняет его в общих предпочтениях.
  • Всякий раз, когда пользователь открывает вашу деятельность. Прочтите ранее сохраненное значение из Shared-Preferences и установите флажок состояния.

Вот пример кода для сохранения состояния флажка, даже если приложение закрыто.

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>
1

checkBox.setChecked(true);
Если вы хотите получить последнее состояние, просто напишите проверяемое состояние в SharedPreferences в onPause() и получите состояние в onResume().

Ссылка: http://developer.android.com/reference/android/widget/CheckBox.html http://developer.android.com/reference/android/content/SharedPreferences.html

1

Ваш лучший вариант - реализовать SharedPreferences в вашем приложении и сохранить его состояние. Когда вы запустите приложение, вы получите статус из настроек и установите/снимите флажок.

1

Чтобы запомнить состояние приложения, вы захотите использовать 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"));
}
  • 0
    достаточно ли приведенного выше кода, чтобы получить то, что я хочу? Как я должен применить это к своему флажку?
  • 1
    смотрите _myCheckbox.setChecked он применяет состояние к _myCheckbox.setChecked .
Показать ещё 4 комментария
0

Лучше всего использовать 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));
}

Надеюсь, вы сможете использовать эту информацию

  • 0
    так что для первого фрагмента я должен сделать из него метод или как?
  • 0
    Сделайте метод, который сохранил состояние вашего флажка. Так что каждый раз, когда пользователь проверяет или снимает галочку, текущее состояние сохраняется. Затем вы можете проверить в любом месте действия, был ли последний известный статус отмечен или не отмечен.
0

Это аналогичная статья.. SO Qn Вы можете использовать те же идеи оттуда. Надеюсь это поможет.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню