【发布时间】:2020-06-05 21:05:00
【问题描述】:
我想实现,比如说温度单位转换器。我想使用 android MVVM 和数据绑定来做到这一点,但我不知道如何。 我有一个由三个 EditText 字段组成的片段:摄氏、华氏、开尔文。更改其中之一后,其余部分应自动更新。在没有数据绑定的情况下,我将 TextWatcher 设置为每个字段,并在 onTextChanged 中执行所有验证和转换逻辑并设置其他字段的值。在 beforeTextChanged 中,我删除了其他字段的侦听器,并在 afterTextChanged 中再次设置它们,以避免在一个字段更新时出现无限循环,触发 TextWatcher 更新另一个字段等等...
这是我如何在没有数据绑定的情况下实现这一目标的简化代码。
celsiusEditTextWatcher = new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
fahrenheitEditText.removeTextChangedListener(fahrenheitEditTextWatcher);
kelvinEditText.removeTextChangedListener(kelvinEditTextWatcher);
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
double celsius = String.valueOf(celsiusEditText.getText());
double fahrenheit = celsiusToFahrenheit(celsius);
double kelvin = celsiusToKelvin(celsius)
fahrenheitEditText.setText(Double.toString(fahrenheit));
kelvinEditText.setText(Double.toString(kelvin));
}
@Override
public void afterTextChanged(Editable s) {
fahrenheitEditText.addTextChangedListener(fahrenheitEditTextWatcher);
kelvinEditText.addTextChangedListener(kelvinEditTextWatcher);
}
};
感谢任何帮助。
【问题讨论】:
-
那么,你有什么问题?怎么回事?
-
我想使用数据绑定来做同样的事情,拥有单独的 Fragment、ViewModel 和 Model 类。
-
单独的片段是什么意思? 3 在 3 个片段上编辑文本?您能否将您的完整问题解释得更容易理解?
-
你的问题是,你只是在说你想做什么,而不是
what you actually want -
我想在用户编辑其中一个字段时更新其他字段(它们都在一个片段中,比如 ConverterFragment)。它与 textWatchers 一起使用,但现在我希望我的应用程序使用数据绑定和 MVVM,其中有 ConverterFragment、ConverterViewModel 和 TemperatureModel LiveData 和保持温度字段值的模型。问题是我不知道如何将数据绑定与 textWatchers 结合起来,或者除了 textWatcher 和数据绑定之外还有其他解决方案来实现该结果。
标签: android mvvm android-databinding