databinding报错合集

中文引用报错

报错
内容

中文引用会直接报错; 改为变量引用

%d个主题 `
android:text="@{@string/item_node_topic_num(item.topics)}" 

引用kotlin的伴生对象报错

[kapt] An exception occurred: android.databinding.tool.util.LoggedErrorException: Found data binding errors. ****/ data binding error ****msg:cannot find method toString(long) in class com.ukyoo.v2client.util.TimeFormatUtils

object TimeFormatUtils{

    fun toString(ts: Long): String {
        if (ts == -1L) return ""
        val created = ts * 1000
        val now = System.currentTimeMillis()
        val difference = now - created
        val text = if (difference >= 0 && difference <= DateUtils.MINUTE_IN_MILLIS)
            "刚刚"
        else
            DateUtils.getRelativeTimeSpanString(
                created,
                now,
                DateUtils.MINUTE_IN_MILLIS,
                DateUtils.FORMAT_ABBREV_RELATIVE
            )
        return text.toString()
    }
}

xml中引用的地方

android:text="@{TimeFormatUtils.toString(item.created)}"

因为kotlin运行时还是被翻译成java字节码的,所以和.java中调用kotlin一样,在databinding中引用kotlin的对象声明和伴生对象也需要加上@JvmField和@JvmStatic
注解才能将他们暴露为静态,参考官方文档_Object Expressions and Declarations
这里只需要在方法上加上@JvmStatic注解,编译成功

include中使用

  1. 在include的布局内定义好xxx变量
    

        

    
  1. 在容器布局中直接app:xxx引用
    
        
    

        

                
        
  1. 可以直接在include布局内引用xxx对象了

你可能感兴趣的:(databinding报错合集)