【问题标题】:Disable Preference based on Value of its Dependency (Code Check)根据依赖项的值禁用首选项(代码检查)
【发布时间】:2019-07-12 12:04:09
【问题描述】:

我正在尝试做一些我不确定的事情,需要有人提供反馈。

我有 2 个偏好。其中一个,我想依赖另一个的价值。

示例:我的“通知模式”偏好有 2 个选项:“定时器”和“提醒”

如果用户选择“计时器”选项,我希望我的其他首选项可用于设置时间。

否则,我希望禁用设置计时器的首选项。

这是我在我的 pref 更改的侦听器中想出的:

if (key.equals(PREF_NOTIFICATION_MODE)) {

    Preference notifModePref = findPreference(key);
    notifModePref.setSummary(sharedPreferences.getString(key, ""));

    if(!notifModePref.equals("Timer Mode")) {

        Preference timerDurationPref = findPreference(PREF_TIMER_DURATION);
        timerDurationPref.onDependencyChanged(notifModePref, true);

    } else if(notifModePref.equals("Timer Mode")) {

        Preference timerDurationPref = findPreference(PREF_TIMER_DURATION);
        timerDurationPref.onDependencyChanged(notifModePref, false);
    }
}

我不确定我这样做是否正确,或者onDependencyChanged 是否正确。

【问题讨论】:

  • 更新: 到目前为止,当它的 Dependency get 更改为“Timer mode”以外的值时,我成功地“禁用”了 Timer Amount Preference,但是当我更改时它回到“定时器模式”,定时器数量偏好保持禁用..
  • 您能否重新表述您的问题或要求。您所需的代码可能比您的问题更简单。并且你能粘贴你写过的关于代码和偏好xml文件的代码吗?还有一件事要注意,为什么你不使用两个键来检查而不是只使用一个“定时器模式”
  • @RahulPatil 我 am 引用了两个键(因此 if (key.equals(PREF_NOTIFICATION_MODE)) 和另一个 if 来检查 key 是否等于 "Timer Mode" ..无论如何,我只是想知道我是否以正确的方式使用onDependencyChanged,但我使用if statements`和isEnabled,结合onDependencyChanged实现了目标。

标签: android sharedpreferences android-preferences


【解决方案1】:

我通过引用有问题的Preference 并使用if 语句以及使用onDependencyChanged() 和根据需要设置.isEnabled(boolean) 的组合来实现if(key.equals) 内部的目标。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-10-05
    • 2023-04-04
    • 1970-01-01
    • 1970-01-01
    • 2016-09-25
    • 2017-09-13
    • 2016-11-01
    • 1970-01-01
    相关资源
    最近更新 更多