DataBinding的一些笔记

gradle中设置:
dataBinding:{
enabled true
}


1)建立数据源(一个实体类);
2)建立标签:
<layout 命名空间>
<data>
<variable
name="user"
type="com.xql.cesecsh.User"
>
</data>
布局文件的定义
例如:<TextView
android:text="!{user.name}"
/>
</layout>


注释setContentView(R.layout.activity_main);
onCreate(){
ActivityMainBinding binding = DataBindingUtil.setContentView(this,R.layout.activity_mian);
User user = new User();
user.settName("用户名");
user.setNickName("昵称");
binding.setUser(user);
}


dataBinding三目运算符中
user.name == null? user.name:user.nickName;
可以设置为:user.name ?? user.nickName;
其中字符串拼接只能是:``反单引号,或者单引号,而不能用双引号
在DataBinding中不能使用">"、"<",因为xml中代表标签
利用转移字符:
小于号:"&lt;"
大于号:"&gt"
给DataBinding设置监听事件:
1)需要在数据源中刚建立点击方法,命名自定义
例如:
public void clickName(View view){
Toast.makeText(view.getContext(),"点击",Toast.SHOUT).show();
}
在点击TextView中的点击事件中:
android:onClick="@{user.clickName}"
android:onLongClick="{user.onLongClick}"
设置监听中更需要注意:
1)方法名必须完全相同
2)参数列表和返回值类型必须和实际监听方法的方法一直
onClickListener(new ClickListener(){
void onClick(View view)
});
如果一个布局中两个子布局用的一个数据源,则是利用List数据,并且需要把数据源引入
<import type="com.xql.User"/>
<variable
name="users"
type="java.util.List&lt; User &gt;" 
/>
左右布局中只需添加该数据源的当前数据
使用中listView中的子数据源点击事件较为实用


ListView中实用DataBinding中常用控件的使用:
1)建议一个通用的Adapter继承BaseAdapter,实现方法
2)自定义四个属性
private Context context;
private List<T> list;
private int variableId;
private int layoutId;
3)在getView中:
ViewDataBinding binding = null;
if(converView == null){
binding = DataBindingUtil.inflate(LayoutInflater.from(context),layoutId,parent,flase);
}else{
binding = DataBindingUtil.getBinding(converView);
}
return binding;


4)在布局文件中设置Adapter
<data>
<variable
name="adapter"
type="androd.widget.BindingAdapter"
/>
</data>
5)ListView中布局
<ListView
android:layout_width
android:layout_height
app:adapter="@{ adapter }"
/>
在想xml中有setXXX();在DataBinding中只需用app:XXX=……即可
6)定义item 项,具体类似之前的定义
在Android中有R文件,在dataBinding中有BR文件
例如:
CommonAdapter adapter = new CommonAdapter<User>(this,users,R.laout.item,com.jash.dataBingding.BR.user)


listView点击不能马上改变相应的数据问题:
将该数据源继承BaseObservable
然后再修改的setXXX方法中添加 notifyPropertyChanged(com.jash.databinding.BR.xx);


如果是用ImageView设置网络地址的问题:
利用自定义属性解决给问题:
1)需要在建立一个图片加载的Utils
2)需要加上注解
public class Utils{
@BindingAdapter({"imagUrl"})
public static void LoadImage(ImageView view,String picUrl){
if(url == null){
view.setImageResuource(R.mipmap.ic_launch);
}else{
//可以使用Google官方中的glide库加载数据,Volley库
Glide.with(view.getContext).load(picUrl).into(view);
}
}
}


3)设置url
4)导入自定义属性xmlns:app="http://schemas.android.com/apk/res-auto"
5)app:imagUrl="{user.icon}",其中app:imageUrl就是注解中的注解内容


注意:
如果实现方法:static 不需要对象,非static需要对象
优点:可以用非static实现一些接口,this实现接口
public void loadImage(){}这种情况的话,如果没有static则会报错,没有的话就不会报错
1)自定义MyComponent implemments DataBindingComponent{
@override
public Utils getUtils(){
private Utils utils;
if(utils == null){
utils = new Utils();
}
return utils;


}
}
2)设置Component
a、在设置布局之前,即binding初始化之前添加:DataBindingUtil.setDefaultComponent(new MyComponent());
b、ActivityMainBinding binding = DataBindingUtil.setContentView(this,R.layout.activity_mian,new MyComponent());
c、ViewDataBinding binding = DataBindingUtil.inflate(LayoutInflater.from(context),layoutId,parent,flase,new MyComponent());
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值