一、自定义Binding类名
在默认情况下,Binding辅助类的名称取决于布局文件的命名,将布局文件的名称按驼峰命名规则更改后,再在后面加上Binding。如布局文件名称为activity_main,对应的Binding辅助类的名称就是ActivityMainBinding。
那么该怎么自定义Binding辅助类的名称呢?看看下面代码
复制代码
1
2
3
4
5
6<data class="com.mvvm.CustomBinding"> <variable name="list" type="ArrayList<String>" /> </data>
也可以
复制代码
1
2
3
4
5
6<data class=".CustomBinding"> <variable name="list" type="ArrayList<String>" /> </data>
我们可以修改activity_main布局文件中data 节点的class属性,以上两种修改方案只是辅助类CustomBinding生成的所在的包不同而已。
然后在Activity中
修改如下代码
复制代码
1
2CustomBinding dataBind = DataBindingUtil.setContentView(this, R.layout.activity_main);
这么自定义Binding辅助类就可以了。
二、静态方法的调用
新建静态方法
复制代码
1
2
3
4
5
6
7public class Utils { public static String getName(Student student){ if(null != student) return student.getName(); return null; } }
布局文件里面调用
复制代码
1
2
3
4
5
6<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中设置。
三、支持表达式
如支持“+”进行字符串拼接
复制代码
1
2
3
4
5
6<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键上面的键。
支持三目运算
复制代码
1
2
3
4
5
6<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类型的时间
先定义布局文件的代码
复制代码
1
2
3
4<variable name="time" type="java.util.Date" />
复制代码
1
2
3
4
5
6<TextView android:id="@+id/tv_time" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@{time}" />
再定义转换器
复制代码
1
2
3
4
5
6
7
8
9public 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内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复