将Int
值绑定到TextView
会导致Resources$NotFoundException
出现消息“字符串资源ID#0x2a”(其中0x2a
是{{1}的值}。为什么会发生这种情况,以及如何解决?
示例代码: * layout / activity_main.xml:
Int
Thing.kt:
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<data>
<variable name="data" type="com.example.Thing" />
</data>
<LinearLayout tools:context=".MainActivity">
<TextView android:text="@{data.x}"/>
</LinearLayout>
</layout>
MainActivity.kt:
package com.example
data class Thing(
var x:Int = 42
)
答案 0 :(得分:1)
TextView.setText(int)
是在将数据绑定添加到Android之前创建的,将其参数解释为资源标识符。要将整数绑定到TextView,请使用Integer.toString(int)
或String.valueOf(int)
转换值(Int.toString
显然不可用,因为该值已取消装箱):
<TextView android:text="@{Integer.toString(data.x)}"/>
如果TextView.setText(int)
不存在,您还可以编写一个binding adapter以在绑定值类型和View
显示的类型之间自动转换。