我有一个 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/