【问题标题】:set DialogPreference summary OnPreferenceChange设置 DialogPreference 摘要 OnPreferenceChange
【发布时间】:2013-11-05 23:13:17
【问题描述】:

我有一个DialogPreference 的子类,称为MyDialogPreference,它有两个用户名和密码的EditText,当我点击DialogInterface.BUTTON_POSITIVE按钮时,我设置了一些这样的首选项:

//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 的摘要

Preferences 的布局如下:

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

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

我试图将此 DialogPreference 绑定到 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。对不起我的英语不好

【问题讨论】:

  • 好吧,没有人回答,但我目前使用 SharedPreferencesListener 找到了这个问题的解决方案here

标签: android


【解决方案1】:

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 本身中实现。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-24
    • 1970-01-01
    • 2013-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多