我有CheckBoxPreference和另外两个:一个是Edit Test Pref。另一个是ListBox Pref。我如何启用列表框pref和禁用编辑文本首选项。何时打开CheckBoxPreference?
答案 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);
}
}