将Int绑定到TextView时,ResourcesNotFoundException

时间:2019-01-12 03:37:19

标签: android data-binding kotlin

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
    )
    

1 个答案:

答案 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显示的类型之间自动转换。