1

当对话框关闭时,从 PreferenceActivity 调用的自定义 DialogPreference 不会调用 OnPreferenceChange()。

我认为 persistXXXX() 是触发器:

@Override
protected void onDialogClosed(boolean positiveResult) {
    super.onDialogClosed(positiveResult);
    if(positiveResult) {
        persistString(s);
    }
}

但 onPreferenceChanged() 不会被调用。

所有其他标准首选项类型都有效(例如 EditTextPreference、ListPreference 等)。

所以问题是:是什么触发了这种偏好类型的 OnPreferenceChange() ?

4

2 回答 2

1
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);
    }

我认为,您缺少 registerOnSharedPreferenceChangeListener

于 2013-01-10T03:23:38.047 回答
1

接受的答案对我不起作用。也可能是由于我的设置,因为我使用 aPreferenceFragmentCompat而不是PreferenceActivity等。挖掘Preference导致的源代码,得到一个非常简单的解决方案:

@Override
protected void onDialogClosed(boolean positiveResult) {
    super.onDialogClosed(positiveResult);
    if(positiveResult) {
        persistString(s);
        callChangeListener(s);  // the solution!
    }
}

或者在我的情况下(按钮点击,Kotlin):

val button = holder?.findViewById(R.id.my_button)
button?.setOnClickListener {
    persistString(s)
    callChangeListener(s)  // the solution!
}
于 2019-08-10T07:45:28.953 回答