android - 设置 DialogPreference 摘要 OnPreferenceChange

标签 android

我有一个 DialogPreference 的子类,名为 MyDialogPreference,当我单击 DialogInterface.BUTTON_POSITIVE 时,它有两个用于用户名和密码的 EditText按钮,我设置了一些首选项,如下所示:

//I get userId from SQLite before this
SharedPreferences settings = this.getContext()
                .getSharedPreferences(PREFS_NAME, 0);
SharedPreferences.Editor editor = settings.edit();

editor.putInt("userId", userId);
editor.commit();

我希望在调用 DialogPreference 的 SettingsFragment 中,每当我关闭 MyDialogPreference 时,我都能够将更改的数据显示为首选项的摘要

这是首选项的布局:

    <Preference
        android:key="update"
        android:title="Update other preference" >
    </Preference>

    <com.cmr.MyDialogPreference
        android:key="userPassScreen"
        android:title="Login User" >
    </com.cmr.MyDialogPreference>

我试图将此 DialogPreference 绑定(bind)到 OnPreferenceChangeListener,但没有成功。

这也是代码:

DialogPreference userPassScreen = (DialogPreference) findPreference("userPassScreen");
userPassScreen
            .setOnPreferenceChangeListener(new OnPreferenceChangeListener() {

                @Override
                public boolean onPreferenceChange(Preference preference,
                        Object newValue) {
                    SharedPreferences settings = context
                            .getSharedPreferences(PREFS_NAME, 0);

                    int userId = settings.getInt("userId", 0);
                    if (userId == 0) {
                        preference.setSummary("Please Login");
                        return false;
                    }
                    try {
                        preference.setSummary(String.valueOf(userId));
                    } catch (Exception e) {
                        e.printStackTrace();
                    }

                    return false;
                }
            });

有什么办法可以做到这一点吗?

PS。抱歉我的英语不好

最佳答案

DialogPreference 的 Android 文档不完整!

看看 Preference#onClick() 的 JavaDoc

/**
 * Processes a click on the preference. This includes saving the value to
 * the {@link SharedPreferences}. However, the overridden method should
 * call {@link #callChangeListener(Object)} to make sure the client wants to
 * update the preference's state with the new value.
 */
protected void onClick() {
}

“重写的方法应该调用 {@link #callChangeListener(Object)}”

在 DialogPreference 中,重写了 onClick 以打开对话框,但 onDialogClosed() 的 JavaDoc 没有提到调用 #callChangeListener(Object)。

所以只需添加一个

callChangeListener(newValue);

调用 onDialogClosed() 实现的开头。

但是,这应该在 DialogPreference 本身中实现。

关于android - 设置 DialogPreference 摘要 OnPreferenceChange,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18473122/

相关文章:

javascript - 为显示的 webview 添加底部边框

android - 如何在 Android App 代码中隐藏导航栏

javascript - 为什么我的英特尔 xdk 应用程序无法在 Android 上运行?

java - 动态创建数组,其中所有子项都位于线性布局内

java - 即使使用 START_STICKY,Android 也不会重新创建服务

带有 Environment.getExternalStorageDirectory() !=/mnt/sdcard/? 的 Android 设备

android - Android 原生视频播放器 API 杠杆 16 的源代码

java - Room Insert 仅插入主键而不插入列

android - 手机找不到 Sensor.TYPE_LINEAR_ACCELERATION 的传感器

android - 如何在android中使用jsoup从html中提取特殊数据