Получить значение из CheckBoxPreference при его изменении - PullRequest
2 голосов
/ 06 ноября 2011

Я пытаюсь создать экран предпочтений с элементом управления Checkbox.

 <CheckBoxPreference android:summaryOn="@string/mySummaryOn" 
  android:summaryOff="@string/mySummaryOff" 
  android:key="myCB" 
  android:title="my checkbox"/>

Я хочу получить это логическое значение, когда оно будет изменено.

В моем приложении я сделалкак показано ниже, реализация OnSharedPreferenceChangeListener

public boolean cbValue;
 @Override
    public void onCreate() {
        // The following line triggers the initialization of ACRA
        ACRA.init(this);
        prefs=PreferenceManager.getDefaultSharedPreferences(this);
        prefs.registerOnSharedPreferenceChangeListener(this);
        super.onCreate();
    }

public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,
        String key) {
    // TODO Auto-generated method stub
    //FacebookStatus=prefs.getBoolean("myCB", true);
    Toast.makeText(getBaseContext(), "Shared Preference Changes ",Toast.LENGTH_LONG ).show();
}

onSharedPreferenceChanged метод вообще не вызывается, даже когда я переключаю флажок на экране pref.изменил, что я должен делать?

Ответы [ 2 ]

2 голосов
/ 06 ноября 2011

Вместо использования OnSharedPreferenceChangeListener:

Добавьте в свой предпочтительный метод деятельности onCreate следующую строку: Preference myCheckbox = findPreference("myCB") Затем примените слушателя к myCheckbox объекту: myCheckbox.setOnPreferenceChangeListener(myCheckboxListener)

Код слушателя (как поле класса):

private OnPreferenceChangeListener myCheckboxListener = new OnPreferenceChangeListener() {

    public boolean onPreferenceChange(Preference preference, Object newValue) {
        // Read new value from Object newValue here
        return true;
    }
};
0 голосов
/ 10 сентября 2014

Вы можете прочитать новое значение напрямую с помощью объекта параметра SharedPreferences. Если вы знаете, что ключ от CheckBoxPreference, вы можете просто прочитать значение:

@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {

    if (key == getString(R.string.CheckBoxKeyId)) {
        boolean myBool = sharedPreferences.getBoolean(key, false);
        // do stuff
    }
}

Это спасет вас от добавления OnPreferenceChangeListener для каждого из CheckBoxPreference, который у вас может быть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...