【发布时间】:2021-03-01 13:01:49
【问题描述】:
我正在使用带有 DataBindg 的 LiveData。 我的视图模型:
private val _counter = MutableLiveData<Int>()
val counter: LiveData<Int>
get() = _counter
在初始化块中它被设置为 0。
init {
_counter.value = 0
活动中:
binding.viewModel = viewModel
binding.lifecycleOwner = this
视图中的数据绑定:
android:text="@{viewModel.counter}"
运行应用程序后因错误而关闭,因为它尝试获取计数器 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 的值放入视图中? 谢谢
【问题讨论】:
标签: android data-binding android-databinding android-livedata