Android LiveData 和 DataBinding - 数字问题
Android LiveData and DataBinding - problem with numbers
我正在使用带有 DataBindg 的 LiveData。
我的视图模型:
private val _counter = MutableLiveData<Int>()
val counter: LiveData<Int>
get() = _counter
在 init 块中它被设置为 0。
init {
_counter.value = 0
在activity中:
binding.viewModel = viewModel
binding.lifecycleOwner = this
视图中的数据绑定:
android:text="@{viewModel.counter}"
在 运行ning 应用程序因错误而关闭后,因为它尝试获取计数器 0 的值并将其放入 getString 方法,该方法在参数为 Int 时尝试查找字符串资源。
错误:
java.lang.RuntimeException: Failed to call observer method
...
Caused by: android.content.res.Resources$NotFoundException: String resource ID #0x0
它尝试 运行 在 ClickMeBindingImpl.java
中生成代码
if ((dirtyFlags & 0x31L) != 0) {
// api target 1
this.clickCounterText.setText(androidxDatabindingViewDataBindingSafeUnboxViewModelCounterGetValue);
}
你知道为什么吗?
我的解决办法是:
android:text="@{viewModel.counter+
}"
或更好的解决方案:
<string name="number">%d</string>
...
android:text="@{@string/number(viewModel.counter)}"
你知道我做错了吗?或者为什么它不知道计数器是 Int 而我想把 Int 的值放到视图中?
谢谢
你的 viewmodel.counter
在 layout xml file 中指的是 ViewModel 的 counter 类型的变量 [= =25=]整数
android:text
属性需要 String.
类型的值
要解决它,您必须使用 android:text="@{String.valueOf(viewmodel.counter)}"
,它实际上是 returns Int.
的 String 表示形式
在您的布局 xml 文件中只需替换 :
android:text="@{viewModel.counter}"
与 android:text="@{String.valueOf(viewmodel.counter)}"
我正在使用带有 DataBindg 的 LiveData。 我的视图模型:
private val _counter = MutableLiveData<Int>()
val counter: LiveData<Int>
get() = _counter
在 init 块中它被设置为 0。
init {
_counter.value = 0
在activity中:
binding.viewModel = viewModel
binding.lifecycleOwner = this
视图中的数据绑定:
android:text="@{viewModel.counter}"
在 运行ning 应用程序因错误而关闭后,因为它尝试获取计数器 0 的值并将其放入 getString 方法,该方法在参数为 Int 时尝试查找字符串资源。 错误:
java.lang.RuntimeException: Failed to call observer method
...
Caused by: android.content.res.Resources$NotFoundException: String resource ID #0x0
它尝试 运行 在 ClickMeBindingImpl.java
中生成代码if ((dirtyFlags & 0x31L) != 0) {
// api target 1
this.clickCounterText.setText(androidxDatabindingViewDataBindingSafeUnboxViewModelCounterGetValue);
}
你知道为什么吗?
我的解决办法是:
android:text="@{viewModel.counter+
}"
或更好的解决方案:
<string name="number">%d</string>
...
android:text="@{@string/number(viewModel.counter)}"
你知道我做错了吗?或者为什么它不知道计数器是 Int 而我想把 Int 的值放到视图中? 谢谢
你的 viewmodel.counter
在 layout xml file 中指的是 ViewModel 的 counter 类型的变量 [= =25=]整数
android:text
属性需要 String.
要解决它,您必须使用 android:text="@{String.valueOf(viewmodel.counter)}"
,它实际上是 returns Int.
在您的布局 xml 文件中只需替换 :
android:text="@{viewModel.counter}"
与 android:text="@{String.valueOf(viewmodel.counter)}"