6

I am trying to create an App where the preference summary changes based on the checked state of a CheckBoxPreference.

I am not quite sure how to query preferences since a good old isChecked() won't work.

рüффп
  • 5,172
  • 34
  • 67
  • 113
SweSnow
  • 17,504
  • 10
  • 36
  • 49

2 Answers2

17

Would be much simpler if you just used android:summaryOff and android:summaryOn in your preference layout. No code required. E.g:

<CheckBoxPreference
        android:enabled="true"
        android:key="alerts"
        android:title="Alerts" 

        android:summaryOn="You will get notified when something interesting happens"
        android:summaryOff="You will not be notified"
        /> 

See: http://developer.android.com/reference/android/preference/CheckBoxPreference.html

Jay Sidri
  • 6,271
  • 3
  • 43
  • 62
2
public class Preferences extends PreferenceActivity
        implements OnSharedPreferenceChangeListener {

    public final static String KEY_CHECK = "check";
    private CheckBoxPreference mCheckBoxPreference;

    @Override
    public void onCreate(Bundle savedInstance) {
        super.onCreate(savedInstance);
        addPreferencesFromResource(R.xml.preferences);
        mCheckBoxPreference = (CheckBoxPreference) getPreferenceScreen()
            .findPreference(KEY_CHECK);
    }

    @Override
    protected void onResume() {
        super.onResume();
        getPreferenceScreen().getSharedPreferences()
            .registerOnSharedPreferenceChangeListener(this);
    }

    @Override
    protected void onPause() {
        super.onPause();
        getPreferenceScreen().getSharedPreferences()
            .unregisterOnSharedPreferenceChangeListener(this);
    }

    public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,
            String key) {
        if (key.equals(KEY_CHECK)) {
            if (mCheckPreference.isChecked()) {
                mCheckPreference.setSummary(mCheckPreference.getEntry());
            }
        }
    }
}
biegleux
  • 13,179
  • 11
  • 45
  • 52
  • Your code is giving me errors saying that onSharedPreferenceChangeListner is an unknown entity. Why is that? – SweSnow Jul 31 '12 at 13:21
  • Have you imported `import android.content.SharedPreferences.OnSharedPreferenceChangeListener;` ? or try to use `SharedPreferences.OnSharedPreferenceChangeListener` instead. – biegleux Jul 31 '12 at 13:31