概述
一、自定义Binding类名
在默认情况下,Binding辅助类的名称取决于布局文件的命名,将布局文件的名称按驼峰命名规则更改后,再在后面加上Binding。如布局文件名称为activity_main,对应的Binding辅助类的名称就是ActivityMainBinding。
那么该怎么自定义Binding辅助类的名称呢?看看下面代码
<data class="com.mvvm.CustomBinding">
<variable
name="list"
type="ArrayList<String>" />
</data>
也可以
<data class=".CustomBinding">
<variable
name="list"
type="ArrayList<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系列(二)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复