我是靠谱客的博主 优秀发夹,最近开发中收集的这篇文章主要介绍MVVM中data binding系列(二),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

一、自定义Binding类名

在默认情况下,Binding辅助类的名称取决于布局文件的命名,将布局文件的名称按驼峰命名规则更改后,再在后面加上Binding。如布局文件名称为activity_main,对应的Binding辅助类的名称就是ActivityMainBinding。

那么该怎么自定义Binding辅助类的名称呢?看看下面代码

<data class="com.mvvm.CustomBinding">
  <variable
            name="list"
            type="ArrayList&lt;String>" />
</data>

也可以

<data class=".CustomBinding">
 <variable
            name="list"
            type="ArrayList&lt;String>" />
</data>

我们可以修改activity_main布局文件中data 节点的class属性,以上两种修改方案只是辅助类CustomBinding生成的所在的包不同而已。
然后在Activity中
修改如下代码

CustomBinding dataBind = DataBindingUtil.setContentView(this, R.layout.activity_main);

这么自定义Binding辅助类就可以了。

二、静态方法的调用

新建静态方法

public class Utils {
    public static String getName(Student student){
        if(null != student) return student.getName();
        return null;
    }
}

布局文件里面调用

     <TextView
            android:id="@+id/tv_name"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@{Utils.getName(student)}" />

注意Utils类要导包,student要在data标签下定义,student的真实值需要在Activity中设置。

三、支持表达式

如支持“+”进行字符串拼接

  <TextView
              android:id="@+id/tv_age"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:text="@{`Age:`+String.valueOf(student.age)}" />

注意这里包裹Age:的不是单引号,是键盘Tab键上面的键。

支持三目运算

  <TextView
              android:id="@+id/tv_age"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:text="@{isShow?View.VISIBLE:View.GONE}" />

dataBing还支持很多表达式,如instanceof,位移等,在这里就不一一赘述了。

四、Converter

Converter是转换器,如果你现有的数据格式和要显示的数据格式不一致,就可以用Converter进行转换。
举个例子
现有数据为java.util.Date,页面上要显示的的是String类型的时间
先定义布局文件的代码

    <variable
            name="time"
            type="java.util.Date" />
 <TextView
            android:id="@+id/tv_time"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@{time}" />

再定义转换器

public class Utils {
  
    @BindingConversion
    public static String convertDate(Date date){
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        return sdf.format(date);
    }
}

这样只需要在Activity中设置time变量的值就可以 了。

最后

以上就是优秀发夹为你收集整理的MVVM中data binding系列(二)的全部内容,希望文章能够帮你解决MVVM中data binding系列(二)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(67)

评论列表共有 0 条评论

立即
投稿
返回
顶部