【发布时间】:2021-07-30 02:42:34
【问题描述】:
现在我有一个搜索栏,它附加了一个 onseekbarchangelistener,每次搜索栏移动时都会更改 TextView(targetTemperature) 的值。
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
Log.d(TAG, "onProgressChanged: progress: " + progress);
if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.O) {
float addTo18 = ((float)progress) / 2;
Log.d(TAG, "onProgressChanged: addTo18 " + addTo18);
if(MainActivity.selectedThermostat.getValue().getIsCelsius())
targetTemperature.setText(Float.toString((float) (18.0 + addTo18))); //u2109 for farenheit
else
targetTemperature.setText(Float.toString((float) (64.0 + addTo18))); //u2109 for farenheit
} else {
if(MainActivity.selectedThermostat.getValue().getIsCelsius()) {
float addTo18 = (float) ((float) progress - 18.0) / 2;
Log.d(TAG, "onProgressChanged: addTo18 " + addTo18);
targetTemperature.setText(String.valueOf(18.0 + addTo18)); //u2109 for farenheit
} else {
float addTo18 = (float) ((float) progress - 64.0) / 2;
Log.d(TAG, "onProgressChanged: addTo18 " + addTo18);
targetTemperature.setText(String.valueOf(64.0 + addTo18)); //u2109 for farenheit
}
}
}
在阅读了一些关于 MVVM 的文章后,我看到活动中视图(TextViews、ImageViews 等)的变化来自于观察视图模型中可变实时数据对象的变化。
在这种情况下,最好在视图模型中创建一个可变的实时数据对象并对其进行更改,而不是直接更改 TextView(targetTemperature)。
基本上
用户交互 -> 搜索栏改变 -> textView 改变
或
用户交互 -> 搜索栏更改 -> 更改视图模型中的可变实时数据 -> 文本视图更改
【问题讨论】: