【问题标题】:Android CheckBoxPreference: how to disable and enable other preferences on preference changeAndroid CheckBoxPreference:如何在首选项更改时禁用和启用其他首选项
【发布时间】:2011-10-13 08:44:39
【问题描述】:

我有 CheckBoxPreference 和其他 2 个:一个是 Edit Test Pref。另一个是 ListBox Pref。如何启用列表框首选项和禁用编辑文本首选项。 CheckBoxPreference 何时打开?

【问题讨论】:

    标签: android android-preferences


    【解决方案1】:

    作为一种变体,可以将“依赖项”放入 ListBoxPref。

    <PreferenceCategory
    android:key="key1"
    android:title="@string/title1">
    <SwitchPreference
        android:key="parents"
        android:summaryOff="@string/do_smthng"
        android:summaryOn="@string/do_smthng"
        android:switchTextOff="@string/i_am_sleeping"
        android:switchTextOn="@string/i_have_free_time" />
    <CheckBoxPreference
        android:key="baby"
        android:dependency="parents"
        android:title="@string/basic_habbits"
        android:summaryOff="@string/play_with_parents"
        android:summaryOn="@string/play_with_parents"
        android:defaultValue="true" />
    </PreferenceCategory>
    

    基本上,宝宝睡觉的时候不能和父母一起玩=)

    【讨论】:

    • 你太棒了,先生!
    • 正是我要找的...我在我的代码中禁用了使用,但需要向用户显示他们被禁用以便他们可以打开它。
    【解决方案2】:

    好像是this question的复制品

    您可以覆盖public void onSharedPreferenceChanged(final SharedPreferences sharedPreferences, final String key),并在使用key.equals(&lt;Your key for setting&gt;) 调用它时执行以下操作:

    boolean isEnabled = sharedPreferences.getBoolean(key, true);
    getPreferenceScreen().findPreference("list box preference key").setEnabled(isEnabled);
    getPreferenceScreen().findPreference("list box preference key").setEnabled(!isEnabled);
    

    此外,在 onCreate() 中执行相同操作,以使您的首选项屏幕正确初始设置。

    【讨论】:

      【解决方案3】:

      您可以获取复选框值。然后,要启用/禁用首选项,您可以使用pref.setEnabled(false); 启用,只需使用相同的功能并输入真实值即可。

      【讨论】:

        【解决方案4】:

        只是为了简化 Sergio 的回答,

          android:dependency="keyOfParent"
        

        这使得item依赖于父item,可能需要一个switch。

        还向 onSharedPreferenceChanged 添加一个监听器,有时.. 它有时不能按预期工作(不知道为什么)

        添加

        public class YourClass extends Whatever implements SharedPreferences.OnSharedPreferenceChangeListener
        

        然后在 OnCreate() 之后

        @Override
        public void onSharedPreferenceChanged (SharedPreferences p1, String p2)
             {      
             if (Your Arguments)
              {
                // getPreferenceScreen().findPreference("pref_key").setEnabled(false);
              }
             }
        

        【讨论】:

          猜你喜欢
          • 2011-02-10
          • 2014-02-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多