Search code examples
androidandroid-preferences

Call method after changing preferences in Android


i have my preferences like this:

settings.xml:

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >

    <PreferenceCategory android:title="@string/sectionOneTitle" >
        <EditTextPreference
                android:title="@string/setModuleName"
                android:summary="@string/setModuleNameSum"
                android:key="moduleID"/>
    </PreferenceCategory>

    <PreferenceCategory android:title="@string/sectionTwoTitle" >
        <EditTextPreference
                android:title="@string/setPhoneNumber"
                android:summary="@string/setPhoneNumberSum"
                android:key="phoneNumber"/>
    </PreferenceCategory>

    <PreferenceCategory android:title="@string/sectionThreeTitle" >
        <CheckBoxPreference android:title="@string/setSmsSend"
            android:key="setSmsSend" android:summary="@string/setSmsSendSum" />
    </PreferenceCategory>

</PreferenceScreen>

Settings Activity

public class SettingsActivity extends PreferenceActivity {
    @SuppressWarnings("deprecation")
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.settings);
    }
}

Now i need to get a method in my MAINActivity called when the checkbox is set or unset. Is this possible?

Thanks


Solution

  • Add an OnSharedPreferenceChangeListener to your activity:

    import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
    ...
    
    public class MAINActivity extends Activity {
        private OnSharedPreferenceChangeListener listener =
            new OnSharedPreferenceChangeListener() {
                @Override
                public void onSharedPreferenceChanged(SharedPreferences prefs, String key) {
                    if (key.equals("setSmsSend") {
                        smsSendPrefChanged(); // the function you want called
                    }
                }
            };
    
        @Override
        protected void onCreate() {
            super.onCreate();
            SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
            prefs.registerOnSharedPreferenceChangeListener(listener);
            ...
        }
    
        @Override
        protected void onDestroy() {
            super.onDestroy();
            SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
            prefs.unregisterOnSharedPreferenceChangeListener(listener);
            ...
        }
    
        ...
    }