【发布时间】:2021-08-07 03:21:26
【问题描述】:
我有 3 个编辑文本,我必须将前两个中写入的数字相乘,并使用 Android Livedata 使结果在第三个上显示。
viewModel.num1.observe(this,
Observer { newNum1-> binding.ediText1.text = newNum1.toString() }
viewModel.num2.observe(this,
Observer { newNum2-> binding.ediText2.text = newNum2.toString() }
viewModel.num3.observe(this,
Observer { newNum3-> binding.ediText3.text = newNum3.toString() }
我尝试了类似的方法,使用 2 个 MutableLiveData 和一个 MediatorLivedata,但我做错了,因为它没有实时更新第三个 EditText。有人可以帮我吗?
class MyViewModel : ViewModel() {
private var num1 = MutableLiveData<Int>();
private var num2 = MutableLiveData<Double>();
private var mun3 = MediatorLiveData<Double>();
num3.addSource(num1, this::onChanged);
num3.addSource(num2, this::onChanged);
private fun onChanged(x : Double) {
var a = num1.value
var b = num2.value
if (a== null)
a= 0;
if (b== null)
b= 0.0;
num3.setValue(a * b);
}
}
我正在使用 Kotlin,但我接受任何类型的代码,即使在 java 中也是如此。
感谢您的耐心和帮助!
最好的问候,马克。
【问题讨论】:
标签: android kotlin viewmodel android-livedata observers