Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 自定义对话框首选项不会在PreferenceActivity中触发OnPreferenceChanged_Android_Android Preferences - Fatal编程技术网

Android 自定义对话框首选项不会在PreferenceActivity中触发OnPreferenceChanged

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

从PreferenceActivity调用的自定义DialogPreference在对话框关闭时不调用OnPreferenceChange()

我认为persistXXXX()是触发器:

@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!
}