根据另一个首选项的更改刷新首选项的EditText

时间:2011-03-03 10:31:12

标签: android android-preferences

我想根据其他偏好设置的更改,更改Preference中每个PreferenceActivity中显示的值显示

我有一个应用程序,可以在Preferences中存储指标(浮点)值。我还有一个名为Preference的{​​{1}},用户可以在其中切换公制单位或英制单位。

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

如果用户仅切换指标首选项并离开metric,则一切正常。当他返回时,值以正确的方式显示。例如,如果他去查看PreferenceActivity,则显示仍会显示指标值。

在我的userHeight我希望在PreferenceActivity偏好更改时刷新显示的值(我确保在存储这些值时,它们将被正确转换回来):

this.metric.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
    @Override
    public boolean onPreferenceChange(Preference preference, Object newValue) {
        final Boolean metric = Boolean.parseBoolean(newValue.toString());
        changeSummaries(metric);
        refreshDisplay(metric); 
        return true;
    }
});

我必须在metric方法中实施什么?知道在refreshDisplay(...)的生命周期中提交的更改值是什么时候也会有所帮助?

1 个答案:

答案 0 :(得分:2)

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

我已经扩展EditTextPreference以便能够存储String

以外的内容

在打开对话框之前,调用onBindDialogView方法,另一个更改Preference已提交(我认为最初它可能不是 - 快速测试证明我错了)。简单地覆盖onBindDialogView允许我将显示的值更改为我想要显示的值:

@Override
protected void onBindDialogView(View view) {
    super.onBindDialogView(view);
    getEditText().setText(getPersistedString(""));
}

@Override
protected String getPersistedString(String defaultReturnValue) {
    final Float storedValue = getPersistedFloat(-1);
    Float returnValue;
    if (MyPreferences.isMetric(getContext())) {
        returnValue = storedValue;
    } else {
        returnValue = this.unit.convertToImperial(storedValue);
    }
    return String.valueOf(returnValue);
}