Android 自定义对话框首选项不会在PreferenceActivity中触发OnPreferenceChanged
从PreferenceActivity调用的自定义DialogPreference在对话框关闭时不调用OnPreferenceChange() 我认为persistXXXX()是触发器:Android 自定义对话框首选项不会在PreferenceActivity中触发OnPreferenceChanged,android,android-preferences,Android,Android Preferences,从PreferenceActivity调用的自定义DialogPreference在对话框关闭时不调用OnPreferenceChange() 我认为persistXXXX()是触发器: @Override protected void onDialogClosed(boolean positiveResult) { super.onDialogClosed(positiveResult); if(positiveResult) { persistString(s
@Override
protected void onDialogClosed(boolean positiveResult) {
super.onDialogClosed(positiveResult);
if(positiveResult) {
persistString(s);
}
}
但是onPreferenceChanged()不会被调用
所有其他标准首选项类型都有效(例如EditTextPreference、ListPreference等)
所以问题是:是什么触发了此首选项类型的OnPreferenceChange()
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.settings);
SharedPreferences sp = PreferenceManager
.getDefaultSharedPreferences(this);
sp.registerOnSharedPreferenceChangeListener(this);
}
我想,您缺少了RegisterOnSharedReferenceChangeListener已接受的答案对我不适用。也可能是由于我的设置,因为我使用了
PreferenceFragmentCompat
而不是PreferenceActivity
等。挖掘Preference
的源代码可以得到一个非常简单的解决方案:
@Override
protected void onDialogClosed(boolean positiveResult) {
super.onDialogClosed(positiveResult);
if(positiveResult) {
persistString(s);
callChangeListener(s); // the solution!
}
}
或者在我的情况下(点击按钮,Kotlin):
为什么希望调用OnPreferenceChange()?一旦您做出更改并单击OK,将调用OnPreferenceChange()。如果我的问题没有正确表达,我很抱歉……当然必须按下OK按钮。谢谢,Ramesh,这很有效。
val button = holder?.findViewById(R.id.my_button)
button?.setOnClickListener {
persistString(s)
callChangeListener(s) // the solution!
}