数据绑定错误:旧值后面应跟有新值。参数2必须与参数3的类型相同

时间:2016-09-07 16:14:23

标签: android data-binding android-databinding

我正在为自定义字段使用数据绑定。我为此设置了自定义数据绑定适配器。

My Binding Adapter看起来像这样:

@BindingAdapter({"created_by,created_at"})
public static void setDetailCreated(TextView textView, String createdBy, long createdAt) {
    Calendar cal = Calendar.getInstance();
    cal.setTimeInMillis(createdAt);

    SimpleDateFormat dateFormat = new SimpleDateFormat("h:mm a, dd MMM yyyy");

    String format = textView.getContext().getString(R.string.details_created, createdBy,
            dateFormat.format(cal.getTime()));

    textView.setText(format);
}

在我的布局文件中,我有:

 ...
 <data>

    <import type="java.util.Map" />

    <import type="com.example.beans.Friend" />

    <variable
        name="user"
        type="com.example.beans.User" />

    <variable
        name="friends"
        type="Map&lt;String, Friend&gt;" />

 </data>

 ....
 ....

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:created_by="@{friends[user.createdBy].name}"
        app:created_at="@{user.createdAt}" />

但是在跑步时我收到以下错误:

  

错误:任务':app:compileDebugJavaWithJavac'的执行失败。   java.lang.RuntimeException:失败,请参阅日志以获取详细信息。     BindingAdapter setDetailCreated(android.widget.TextView,java.lang.String,long):旧值后面应该跟新值。参数2必须与参数3的类型相同。

我不明白这里出了什么问题?

2 个答案:

答案 0 :(得分:11)

错误在BindingAdapter范围内,应该是

@BindingAdapter({"created_by","created_at"})
public static void setDetailCreated(TextView textView, String createdBy, long createdAt){

}

所有值都应以逗号分隔并用双引号括起来。

答案 1 :(得分:1)

在Kotlin看来这对我来说是这样的:

@BindingAdapter(*arrayOf("created_by, created_at"))
@JvmStatic fun setDetailCreated(textView: TextView, createdBy: String, createdAt: Long){

}