DataBinding

1、环境设置

为了使用 data binding,gradle plugin的版本必须是 1.5.0-alpha1以上。
网上有很多介绍,这里就不多说了
附带链接:http://www.open-open.com/lib/view/open1483079134021.html#articleHeader1

2、简单使用

1、xml中的使用
 

    
    



        

        


其实没有多大的难度,只是需要加上data标签。
data中的name随意设置,这个只是你再xml中使用的名字,代表的是type指定的类。
布局文件中的表达式使用 “@{}” 的语法。

2、Activity或者Fragment中的使用

上述只是在xml中设置了dinding的类,还需要再Activity或者fragment中绑定view和model(官方说法是 link view and model)
activity的onCreat中:
MainActivityBinding binding = DataBindingUtil.setContentView(this, R.layout.main_activity);//对于这个MainActivityBinding类是使用databinding后系统自动生成的类,里面包含了xml和model的bangding关系
Fragment的onCreatView:
ViewDataBinding binding = DataBindingUtil.inflate(inflater,R.layout.fragment_blank,container,false); return binding.getRoot();

到这里,我们只是实现了对象的互相获取,还需要进行数据的绑定,不然你的数据怎么更新到xml上
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

    //1.获取ViewDataBinding对象
    DataBingMain dataBinding = DataBindingUtil.setContentView(this, R.layout.activity_databinding);

    //2.获取数据
    UserEntity user = new UserEntity();
    user.setName("lxf");
    user.setSex("man");
    user.setAge(25);
    user.setType(1);

    //3.绑定数据
    dataBinding.setUser(user);
    //dataBinding.setVariable(BR.user,user);
}

上面的第三步,setter方法对应的写法是,你xml中设置的name是什么,这里就写set什么 例如:name="viewModel",这里就写成setViewModel(对应xml中type的对象)。

3、dataBinding的简单使用
a、如上述代码所设,在activity中创建了model对象,通过set方法我们就实现了数据的链接
b、xml中onClick方法的实现
  

在对应的type的model类中实现该方法则可:
/**
* 打印
*
* @param view
*/
public void getSalesSlip(View view) {
Log.e("sd", "查看签购单");
}
这里有一个是需要注意的,onClick事件对应的方法必须是public的还有就是必须有一个为View的参数(view就是你设置了onClick的那个View,上述代码就是Button)

c、获取xml自身的context来使用
 

对应model中的代码
public void settlementList(Context context) {
Intent intent = new Intent(context, SettlementActivity.class);
context.startActivity(intent);
}

d、@BindingAdapter的使用

这个注解是用来创建自定义属性的,使用这个注解的话,不用在attrs中设置,直接上代码:

        
        

对应的model代码
@BindingAdapter(value = {"image"}, requireAll = false) public static void setImageResource(SettlementView settlementView, Drawable drawable) { settlementView.setSettlementTypeIcon(drawable); }

value对应xml中你自定义的属性如上面的image,requireAll:是否需要全部设置了自定义属性才初始化改方法(好像是这样理解的,后续查查)。
还有就是参数的问题,第一个参数是你设置了该属性的那个View,第二个就是xml中你这个自定义属性设置了对象(上述代码设置了drawable ,所以参数需要传递drawable对象,如果你传的是String 那就应该设置一个String的参数)

e、@BindingConversion的使用

用于属性的转换,例如当xml中的background属性设置了background="@{#FFFFFF}",代码中设置了@bingConversion方法的时候,它会自动去寻找加了该注解的方法,进行转换。(这个例子好像没什么卵用,background设置了color好像就可以自动转换,不必多此一举)
@BindingConversion public static Drawable colorToDrawable(String color) { return new ColorDrawable(Color.parseColor(color)); }

f、减少逻辑代码的书写(这个好像就是databinding的初衷

看代码最直接

今天先写到这吧,这些是这几天来的摸索,但是不善言辞,可能有些遗漏。下篇在弄些关于数据实时更新的,还有双向绑定的,好像还漏和挺多的,还有一些xml表达式的使用,还有什么反向绑定的什么鬼。

你可能感兴趣的:(DataBinding)