【发布时间】:2011-10-13 08:44:39
【问题描述】:
我有 CheckBoxPreference 和其他 2 个:一个是 Edit Test Pref。另一个是 ListBox Pref。如何启用列表框首选项和禁用编辑文本首选项。 CheckBoxPreference 何时打开?
【问题讨论】:
标签: android android-preferences
我有 CheckBoxPreference 和其他 2 个:一个是 Edit Test Pref。另一个是 ListBox Pref。如何启用列表框首选项和禁用编辑文本首选项。 CheckBoxPreference 何时打开?
【问题讨论】:
标签: android android-preferences
作为一种变体,可以将“依赖项”放入 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>
基本上,宝宝睡觉的时候不能和父母一起玩=)
【讨论】:
好像是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() 中执行相同操作,以使您的首选项屏幕正确初始设置。
【讨论】:
您可以获取复选框值。然后,要启用/禁用首选项,您可以使用pref.setEnabled(false); 启用,只需使用相同的功能并输入真实值即可。
【讨论】:
只是为了简化 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);
}
}
【讨论】: