Search code examples
javaandroidsharedpreferencespreferenceactivity

Detect change in preferences


I have a class extending PreferenceActivity:

public class PreferenceActivity extends android.preference.PreferenceActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.preferences);
    }

}

And I have multiple preferences:

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" 
android:title="Preferences">
    <PreferenceCategory
        android:title="Web Server">

        <EditTextPreference
            android:key="accessToken_key"
            android:title="Access Token"
            android:summary="The access token required to access the web server"
            android:dialogTitle="Access Token"
            android:numeric="integer"
            android:maxLength="12" />

    </PreferenceCategory>

</PreferenceScreen>

How can I detect when a user changes the EditTextPreference so that I can immediately store the new value into a variable?


Solution

  • Try looking at

    http://developer.android.com/reference/android/preference/Preference.html http://developer.android.com/reference/android/preference/Preference.OnPreferenceChangeListener.html

    If you are NOT running fragment based Preference then

        findPreference("key_for_pref").setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
    
            @Override
            public boolean onPreferenceChange(Preference preference, Object newValue) {
                // TODO Auto-generated method stub
                return false;
            }
        });
    

    WARNING: This findPreference api is deprecated on newer fragment based preferences

    Hope this will help.