【问题标题】:Refresh EditText of a Preference depending on the change of another Preference根据另一个 Preference 的变化刷新一个 Preference 的 EditText
【发布时间】:2011-03-03 10:31:12
【问题描述】:

我想根据另一个偏好的更改更改我的PreferenceActivity 中每个Preference显示的值。

我有一个将公制(浮点)值存储在Preferences 中的应用程序。我还有一个名为metricPreference,用户可以在其中切换使用公制或英制单位。

我只存储公制值,但当用户切换到英制时,应用程序会显示英制值。

如果用户只切换指标偏好并离开PreferenceActivity,一切都会正常工作。当他回去时,这些值会以正确的方式显示。例如,如果他查看userHeight,显示屏仍会显示度量值。

在我的PreferenceActivity 中,我想在metric 首选项更改时刷新显示的值(我确保当这些值应该被存储时它们会被正确转换回来):

this.metric.setOnPreferenceChangeListener(new OnPreferenceChangeListener() { @覆盖 public boolean onPreferenceChange(Preference preference, Object newValue) { 最终布尔度量 = Boolean.parseBoolean(newValue.toString()); 更改摘要(公制); 刷新显示(公制); 返回真; } });

我必须在refreshDisplay(...) 方法中实现什么?还有助于了解在 PreferenceActivity 生命周期的哪个时间点提交了更改的值?

【问题讨论】:

    标签: android android-preferences


    【解决方案1】:

    我找到了。至少对于我的具体问题,我找到了一个简单的解决方案。

    我已经扩展了EditTextPreference 以便能够存储String 以外的其他内容

    在打开对话框之前,onBindDialogView 方法被调用,此时另一个更改的Preference 已提交(起初我认为它可能不是 - 快速测试证明我错了)。只需覆盖onBindDialogView,我就可以将显示的值更改为我想要显示的值:

    @覆盖 受保护的无效onBindDialogView(查看视图){ super.onBindDialogView(view); getEditText().setText(getPersistedString("")); } @覆盖 受保护的字符串 getPersistedString(String defaultReturnValue) { 最终浮点存储值 = getPersistedFloat(-1); 浮点返回值; if (MyPreferences.isMetric(getContext())) { 返回值 = 存储值; } 别的 { returnValue = this.unit.convertToImperial(storedValue); } 返回 String.valueOf(returnValue); }

    【讨论】:

      猜你喜欢
      • 2020-05-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多