首先,此问题与'onClick'事件参数传递无关。
我有一个DateUtil类,具有以下一种方法:
public static String formatDate(long date) {
SimpleDateFormat dateFormat;
dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.ENGLISH);
Calendar c = Calendar.getInstance();
dateFormat.setTimeZone(TimeZone.getDefault());
c.setTimeInMillis(date);
return dateFormat.format(c.getTimeInMillis());
}
我的模型CommentEntity具有以下属性:
private int id;
private int productId;
private String text;
private Date postedAt;
现在在一种布局中,我正在显示注释。
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<data>
<variable name="comment"
type="com.example.entity.CommentEntity"/>
<variable
name="dateUtil"
type="com.example.util.DateUtil"/>
</data>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="8dp"
android:layout_alignParentRight="true"
android:layout_below="@id/item_comment_text"
//This line gives error for data binding
android:text="@{dateUtil.formatDate(comment.postedAt.time)}"/>
</layout>
我得到的错误是:
找不到方法 类中的formatDate(com.example.util.DateUtil) 长
现在,如果我修改formatDate()方法也是一样,因为默认情况下它将花费当前时间,因此删除数据绑定中传递的参数,它将完美地工作。
那么我是在做错什么还是错误?
请提供在数据绑定中将参数传递给方法的问题的解决方案。
答案 0 :(得分:3)
尝试以下方法:
DateUtil
类对象
在您的 CommentEntity
模型类中制作一个 BindingAdapter 方法,如下所示:
@BindingAdapter("android:text")
public static void setPaddingLeft(TextView view, long date) {
view.setText(DateUtil.formatDate(long));
}
然后针对XML使用以下代码:
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="8dp"
android:layout_alignParentRight="true"
android:layout_below="@id/item_comment_text"
android:text="@{comment.postedAt.time}"/>
说明:
如果您想基于数据模型为视图应用一些自定义逻辑,则需要使用 BindingAdapter 做那个工作。因此,您可以提供一些自定义标签或使用需要在其上设置逻辑的任何默认android:
标签。
我拒绝使用DateUtil
绑定适配器,因为您可能也在其他地方使用了它的方法。因此建议在模型中为该逻辑创建新方法,以使核心逻辑保持不变。 (不过,您可以将DateUtils
用于此逻辑,只需将其设置为 BindingAdapter )。
答案 1 :(得分:0)
因为您想在 DateUtil
中使用静态方法,所以应该导入它:
<data>
<variable ... />
<import type="foo.bar.DateUtil"/>
</data>
并在TextView
中:
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="8dp"
android:layout_alignParentRight="true"
android:layout_below="@id/item_comment_text"
//use DateUtil directly-
android:text="@{DateUtil.formatDate(comment.postedAt.time)}"/>
您的错误试图将其用作 variable
- 这告诉数据绑定期望此类实例绑定到您的 UI 类(Fargment/Activity)中的某处