Android CheckBoxPreference:如何在首选项更改时禁用和启用其他首选项

发布于 2024-12-09 11:51:02 字数 154 浏览 3 评论 0原文

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

I have CheckBoxPreference and 2 others: one is Edit Test Pref. and another is ListBox Pref. How I can enable list box pref and disable edit text pref. when CheckBoxPreference is turned on?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

北笙凉宸 2024-12-16 11:51:02

作为变体,可以将“依赖项”放入 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>

基本上,宝宝在父母睡觉的时候是不能和他们玩的 =)

As a variant, it's possible to put the "dependency" into the 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>

Basically, baby can't play with parents when they are sleeping =)

泪是无色的血 2024-12-16 11:51:02

似乎与 this Question

您可以覆盖 public void onSharedPreferenceChanged(final SharedPreferences sharedPreferences, Final String key) 并在调用时使用key.equals(<您的设置密钥>) 执行以下操作:

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

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

Seems it's duplicate of this question

You can override public void onSharedPreferenceChanged(final SharedPreferences sharedPreferences, final String key) and when it get called with key.equals(<Your key for setting>) do something like:

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

Also, do the same in onCreate() to have Your preferences screen proper initial setup.

最笨的告白 2024-12-16 11:51:02

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

You can get the checkbox value. And then, to enable/disable the preferences, you can use pref.setEnabled(false); To enable, just use the same function and put the true value.

岁月打碎记忆 2024-12-16 11:51:02

只是为了简化 Sergio 的答案,

  android:dependency="keyOfParent"

这使得该项目依赖于父项目,可能需要一个开关。

有时还向 onSharedPreferenceChanged 添加一个侦听器。它有时无法按预期工作(不知道为什么)

在 OnCreate() 之后添加

public class YourClass extends Whatever implements SharedPreferences.OnSharedPreferenceChangeListener

然后

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

Just to simplify the answer from Sergio,

  android:dependency="keyOfParent"

This makes the item dependent on the parent item, may need to be a switch.

Also adding a listener to the onSharedPreferenceChanged works, sometimes.. it sometimes doesn't work as desired ( not sure why )

Add

public class YourClass extends Whatever implements SharedPreferences.OnSharedPreferenceChangeListener

Then after OnCreate()

@Override
public void onSharedPreferenceChanged (SharedPreferences p1, String p2)
     {      
     if (Your Arguments)
      {
        // getPreferenceScreen().findPreference("pref_key").setEnabled(false);
      }
     }
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文