我想根据其他偏好设置的更改,更改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(...)
的生命周期中提交的更改值是什么时候也会有所帮助?
答案 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); }