我在xml文件中定义了我的首选项,如下所示:
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<PreferenceScreen
android:title="@string/pref_screen"
android:key="pref_screen_key">
<CheckBoxPreference
android:defaultValue="true"
android:key="prefs1_key"
android:title="@string/prefs1_str"
android:summary="@string/prefs1_summary" />
....
在PreferenceActivity内部,我为“ pref_screen_key”覆盖了onPreferenceClick():
...
findPreference("pref_screen_key").setOnPreferenceClickListener(
new OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference) {
if (flag) {
// do some stuff
return true; // According to Android doc it means, that click was handled
} else
return false;
}
因此,我希望如果我的标志为true,Android不会使用CheckBoxPreference打开视图,而是执行我的东西(我在onPreferenceClick()内部返回true表示已处理了单击,并且不需要执行默认的onPreferenceClick()行为)。
不幸的是,Android始终以默认行为处理onPreferenceClick()并同时制作我的东西。
这是Android中的错误吗?
有没有一种方法可以防止用户单击PreferenceScreen之后Android显示CheckBoxPreference?
最佳答案
您可能会遇到以下问题:必须将flag
声明为final才能在OnPreferenceClickListener
内部进行访问。尝试将其封装在一个类中并声明该类为final。
要更直接地回答您的问题,请记住,当您从onPreferenceClick()
返回true时,您是在告诉系统“不用担心,我已经处理了”。因此,当您只是简单地返回true而没有实际执行任何操作时,系统本身并不会忽略您,您只是告诉他们单击Preference
时不执行任何操作。
您的代码类似于this example的第108-115行。仔细检查,可能会有所帮助。
关于android - Android为什么会忽略返回true的OnPreferenceClickListener()?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10901023/