我正在尝试将MutableLiveData<Int>
绑定到EditText
元素。我已经实现了绑定适配器,但是当我开始活动时,出现错误:java.lang.RuntimeException: Failed to call observer method
感谢您的帮助。
代码:
ViewModel
val serverPort = MutableLiveData<Int>(9330)
XML
<data>
<variable
name="vm"
type="...LoginViewModel" />
</data>
<com.google.android.material.textfield.TextInputEditText
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_gravity="center"
android:inputType="number"
android:text="@={vm.serverPort}" />
适配器
object Converter {
@BindingConversion
@JvmStatic
fun intToStr(value: Int?): String? {
return value.toString()
}
@InverseBindingAdapter(attribute = "android:text")
@JvmStatic
fun captureIntValue(view: EditText?): Int? {
var value: Long = 0
try {
value = view!!.text.toString().toInt().toLong()
} catch (e: NumberFormatException) {
e.printStackTrace()
}
return value.toInt()
}
您必须尝试将字符串值用于设置android:text
<TextView
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_gravity="center"
android:inputType="number"
android:text="@{String.valueOf(vm.serverPort)}" />