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.counterlayout 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)}"