Data Binding,View基本属性赋值
来源:互联网 发布:php web 文件上传 编辑:程序博客网 时间:2024/05/22 00:11
android中引入Data Binding已经两年了。终于可以告别findViewById(),butterknife了。怎样配置初步使用有很多资料,下面主要介绍一些实际的应用场景,如何设置view一些基本属性以实现减少activity,fragment中减少逻辑代码。
优点:
- 去掉大部分UI相关代码(比如findViewById、setOnClickListener、setText等),使activity,fragment代码更加简洁。
- xml变成UI的唯一真实来源,数据绑定也直接发生在xml,不会在出现UI子线程中操作的问题了
- 实现view 基本属性设置在XML布局文件中完成。view中常见的动态属性:(android:text,android:textColor,android:background,android:visibility,android:onClick,(ImageView)android:src)
需要注意的坑:
- 无法定位错误。(复制拷贝layout文件属性值配置出错)这是一个让人崩溃的问题,特别是初次使用,一旦出错所有使用databinding的xml都跳出来。
- 无法定位错误。(window环境可能因为环境变量未配置,字符串编译默认类型不是UTF-8,编译出错)
- RecycleView 中使用
- item中图片等绑定
- 子View中数据传递
text赋值
//直接赋值
android:text="@{userInfo.nickName}"
//注意赋值时最好使用string.xml中引用值,直接赋值windows环境中可能会编译不过,造成全部databinding布局文件出错。需要在windows环境中配置环境变量,
JAVA_TOOL_OPTIONS,-Dfile.encoding=UTF-8
android:text="@{userInfo.status ? `已关注` : `关注`}"
android:text="@{userInfo.status ?@string/value1 :@string/value2}"
//string.xml中字符串组合
android:text="@{@string/product_value(holdValue)}"
//有逻辑判断的赋值,为null时设置默认值。注意此处外层为单引号,内层为双引号,于其他赋值刚好相反,并非写错了。
android:text='@{userInfo.nickName ?? "7"}' or
android:text='@{userInfo.nickName != null ? userInfo.nickName : "Default Name"}'
//数值型判断
android:text="@{publishNum == 0 ? null : String.valueOf(publishNum) }"
//boolean类型:逻辑判断,
android:padding="@{isBig ? @dimen/bigPadding : @dimen/smallPadding}"
//int型逻辑判断:
android:visibility="@{waitingView == 0 ? View.VISIBLE : View.GONE }"
//int型逻辑判断:大于或小于某值,<表示< ,>表示>
//此处表示小于3时的逻辑判断
android:visibility="@{waitingView < 3 ? View.VISIBLE : View.GONE }"
//3种分支的逻辑判断,根据参照值等于,小于,大于设置对应背景色
//int flag = d != 4 ? (d > 4 ? 9 : 1) : 8;
android:background="@{rightsInfo.curPrice == rightsInfo.openPrice ? @color/gray : (rightsInfo.curPrice < rightsInfo.openPrice ? @color/chart_green : @color/chart_red) }"
单击事件databinding实现
1.定义单件事件接口
/**
* 用于dataBinding点击事件接收
*/
public interface ClickCallback {
void onClick(View view);
}
2.布局文件中引用单件接口
<variable
name="clickCallback"
type="com.XX.XX…ClickCallback" />
3.表示将view自身传递,通过view的ID判断是否触发该view的点击事件。
<TextView
android:id="@+id/txtFocusStatus"
android:layout_width="80dp"
android:layout_height="30dp"
android:background="@{userInfo.status ? @drawable/btn_default_style1 : @drawable/btn_default_style2}"
android:gravity="center"
android:onClick="@{() -> callback.onClick(txtFocusStatus)}"
android:text="@{userInfo.status ? `已关注` : `关注`}"
android:textColor="@{userInfo.status ? @color/black : @color/default_style_color0}"
android:textSize="@dimen/font_text_content" />
4.接口实现
public final ClickCallback mClickCallback = new ClickCallback() {
@Override
public void onClick(View view) {
switch (view.getId()) {
case txtFocusStatus: {
//触发该控件单击事件
}
break;
}
};
//向子布局文件传递定义的对象
<include
android:id="@+id/waiting"
layout="@layout/waiting_view"
app:clickCallback="@{ clickCallback }"
app:waitingView="@{ waitingView }" />
- Data Binding,View基本属性赋值
- data.field.属性赋值
- Data Binding
- Data Binding
- Data && Binding
- Data Binding
- Data binding
- Data Binding
- data binding
- Data Binding
- Data Binding
- Data Binding
- Data Binding
- data binding
- Data Binding
- Data Binding
- Data Binding
- Lab 4: Data Binding with the View-Presenter Pattern
- 搜集的软件研发面试题 持续增加
- HDU 3746 Cyclic Nacklace kmp处理字符串
- CharMatcher
- Java加密解密等操作的工具类
- JavaScript-定时器的使用之延时提示框
- Data Binding,View基本属性赋值
- 日处理20亿数据,实时用户行为服务系统架构实践
- 关于vs老版本转换新版本的一些问题
- 【Go】 Cron定时任务用法
- CaseFormat
- 构造器
- UGUI 绘制自定义折线图
- 程序举例
- spf13-vim 解决.vimrc.local中某些命令无法执行(例如TAB设置)