在Android中更改首选项后调用方法

在Android中更改首选项后调用方法,android,android-preferences,Android,Android Preferences,我的偏好如下: settings.xml: <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" > <PreferenceCategory android:title="@string/sectionOneTitle" > <EditTextPreference android:title="@string/

我的偏好如下:

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>
现在我需要在设置或取消设置复选框时在MAINActivity中调用一个方法。这可能吗


谢谢

将共享首选项ChangeListener上的
添加到您的活动中:

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);
        ...
    }

    ...
}

将共享首选项ChangeListener上的
添加到活动中:

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);
        ...
    }

    ...
}
使用PreferenceFragmentCompat

使用PreferenceFragmentCompat


这是首选项片段还是首选项活动这是我的设置。xml查看编辑是的,我意识到但是你用什么来显示这是首选项片段还是首选项活动这是我的设置。xml查看编辑是的,我意识到,但是你用什么来显示OnSharedPreferenceChangedListener类的外观比如?@progNewFag-很抱歉,名字有错。它是共享首选项ChangeListener的
(“更改”,而不是“更改”)。咨询更多信息。我在示例中添加了一个
import
语句来澄清。OnSharedPreferenceChangedListener类是什么样子的?@progNewFag-很抱歉-名称中有一个拼写错误。它是共享首选项ChangeListener的
(“更改”,而不是“更改”)。咨询更多信息。我在示例中添加了一个
import
语句来澄清。
public class FragmentSettings
extends PreferenceFragmentCompat
implements SharedPreferences.OnSharedPreferenceChangeListener


@Override
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {

    addPreferencesFromResource(R.xml.app_preferences);

    getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
}


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

    switch(key)
    {
        case "KEY1":
            // DO STUFF
            break;

        case "KEY2":
            // DO STUFF
            break;
    }
}