Android CheckBoxPreference:如何禁用和启用偏好更改的其他首选项

时间:2011-10-13 08:44:40

标签: android android-preferences

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

4 个答案:

答案 0 :(得分:33)

似乎它与this question

重复

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

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

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

答案 1 :(得分:32)

作为一种变体,可以放置&#34;依赖&#34;进入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 :(得分:3)

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

答案 3 :(得分:0)

只是为了简化Sergio的答案,

  android:dependency="keyOfParent"

这使得该项目依赖于父项目,可能需要进行切换。

有时也会在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);
      }
     }