Проблема логических предпочтений Android - PullRequest
0 голосов
/ 06 октября 2010

Я хочу, чтобы статус флажка был сохранен в моих настройках.

Я устанавливаю прослушиватель на флажок, и если он отмечен, я выполняю prefs.putBoolean ("cbstatus", true), и это не проверено, я делаю prefs.putBoolean ("cbstatus", false);

Проблема в том, что в моем onStart (), когда я получаю prefs, мой логический getcbstatus = prefs.getBoolean ("cbstatus", ложный);всегда будет возвращать истину, независимо от того, как мой слушатель должен был установить этот статус ранее.

Что я делаю не так?У меня есть рабочие префы для других вещей, таких как прядильщики, текстовые просмотры и редактирование текстов, но то, что должно быть самым простым типом (логическим), доставляет мне трудности.

Я даже пытался удалить весь код, связанный сдля прослушивателей и установки pref для этого флажка, так что единственный код во всем действии, который имеет дело с флажком, находится в строке

Boolean getcbstat = prefs.getBoolean("cbon", false);
    if (getcbstat = true) {
        cb1.setChecked(true);
    }
    else {
        cb1.setChecked(false);
        format.setVisibility(View.VISIBLE);
    }

Поскольку нет предпочтения cbon (я удалил их все), ондолжен вернуть false по умолчанию, и флажок должен быть снят с.cb1, конечно, это имя моего чекбокса.

Есть идеи?

Обновление по коду:

OnClickListener cb = new OnClickListener() {
    public void onClick(View v) {
        if (cb1.isChecked()) {
            prefs.putBoolean("cbon", true);
        }
        else {
            prefs.putBoolean("cbon", false);
        }
    }
};

А в onStart ():

        Boolean getcbstat = prefs.getBoolean("cbon", false);
        cb1.setChecked(getcbstat);

1 Ответ

2 голосов
/ 06 октября 2010

Вы случайно присвоили ему значение true в своем выражении if.

Измените это на

if (getcbstat == true)

[Правка - Как использовать общие настройки (вместо класса настроек Java)] Как использовать SharedPreferences:

private SharedPreferences mPref;
@Override
public void onCreate(Bundle bundle) {
super.onCreate(bundle);

mPref = getSharedPreferences("my_prefs_file", MODE_PRIVATE);

//Other onCreate code goes here...

}  

//Example of where you might want to save preferences
@Override
protected void onPause() {
super.onPause();
Editor prefEdit = pref.edit();

prefEdit.putBoolean("cbon", true);
prefEdit.commit();

}

Когда вам нужно прочитать это позже:

//Example of where you might want to save preferences
@Override
protected void onResume() {
super.onResume();
boolean getcbstat = pref.getBoolean("cbon", false);
}

Вероятно, было бы неплохо создать уровень класса pref-переменной и получить объект предпочтений в разделе onCreate. Измените «my_prefs_file» на любое другое, но помните, что эта строка - то, что вы будете использовать для доступа к этому конкретному набору предпочтений из вашего приложения. Я также рекомендую использовать константы вместо необработанных строк для ключей доступа (например, «cbon»).

Удачи:)

...