gpt4 book ai didi

android - java.lang.RuntimeException : Failed to call observer method when starting Fragment with EditText (number) Two way databinding 错误

转载 作者:行者123 更新时间:2023-11-30 04:54:47 42 4
gpt4 key购买 nike

我正在尝试绑定(bind) MutableLiveData<Int>EditText元素。我已经实现了绑定(bind)适配器,但是当我启动 Activity 时出现错误:java.lang.RuntimeException: Failed to call observer method

感谢您的帮助。

代码:

View 模型

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)}" />

如果您使用数据绑定(bind):两种方式转换。这有点困难,因为没有针对静态方法的逆运算,当然也没有针对任意字符串格式的转换。

字符串到基本类型的转换非常常见,可以使用带有双向数据绑定(bind)表达式的字符串连接语法来完成,但只能使用空字符串:

<EditText android:text="@={`` + vm.serverPort}" .../>

我还建议您引用此 page有关这方面的更多信息。

关于android - java.lang.RuntimeException : Failed to call observer method when starting Fragment with EditText (number) Two way databinding 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59445113/

42 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com