我在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/

10-09 01:34