我正在为自定义字段使用数据绑定。我为此设置了自定义数据绑定适配器。
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<String, Friend>" />
</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的类型相同。
我不明白这里出了什么问题?
答案 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){
}