android - Android中更改首选项后的调用方法

标签 android android-preferences

我有这样的偏好:

设置.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>

设置 Activity

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

现在我需要在设置或取消设置复选框时在我的 MAINActivity 中调用一个方法。这可能吗?

谢谢

最佳答案

OnSharedPreferenceChangeListener 添加到您的 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);
        ...
    }

    ...
}

关于android - Android中更改首选项后的调用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26242581/

相关文章:

android - 如何在android中检索新拍摄照片的图像路径?

android - 偏好类别应该有键吗?

android - 解析 XML 时出错 : not well-formed (invalid token)

java - Webview中如何保存用户名和密码

android - 您如何以编程方式在 Android ICS 及更高版本上截取屏幕截图?

android - 在 Android Q 上结合 WiFi 说明符和建议 API

java - 获取和设置首选项值

android - 为什么我不能将 CheckBoxPreference 与 SwitchPreference 交换?

Android 首选项 Activity 未正确更新

安卓。偏好 Activity 。列表首选项。如何更改 ListPreference 的背景颜色?