Android DataBinding 项目使用介绍(一)

Android DataBinding 介绍

对于databinding,或许有不少人已经用在开发之中,今天为了不给自己闲下来,总结下自己在开发中用到的知识。先上官方介绍http://developer.android.com/intl/zh-cn/tools/data-binding/guide.html。最近在项目中使MVP+databinding的搭建去开发项目,真的发现代码量,逻辑都得到一个提升,但也有个不好的地方,一些类与接口却增加了不少,而且,如果项目接手,学习成本也挺大的。没办法任何东西都有优点与缺点。databinding是2015google IO大会上提出的一个官方库,每次google发布都带来不少惊喜。

databinding是MVVM框架模式,直接在xml中去绑定数据与视图,业务逻辑分离。整体逻辑非常清晰,代码量也大大减少,特别是在我们常用的listview,recyclerView等等,不用再去setText,setOnListener等等。可以说瞬间逼格大大提升。

Android studio配置

2.0的android studio基本上都自带这个库,使用只要在gradle中简单配置一下。

android {
    ....
    dataBinding {
        enabled = true
    }
}


使用从XML开始


我们先看一段代码。

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
   <data>
	<import type="com.example.User"/>
       <variable name="user" type="User"/>
   </data>
   <LinearLayout
       android:orientation="vertical"
       android:layout_width="match_parent"
       android:layout_height="match_parent">
       <TextView 
	   android:id="@+id\tv_name"
	   android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:text="@{user.firstName}"/>
       <TextView android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:text="@{user.lastName}"/>
   </LinearLayout>
</layout>

public class User {
    public final String firstName;
    public final String lastName;
   
    public void setFirstName(String firstName){
	this.firstName=firstName
	}
    public String getFirstName(){
	return firstName
	}
    public void setLastName(String lastName){
	this.lastName=lastName;
	}
    public String getLastName(){
	return lastName;
	}
}



最外层开始是用layout标签,接下来子标签data,在data标签中就是我们需要绑定的数据类型,常用使用的使用import,variable.
1,import都知道是导入的意思,类似我们java文件的import是一个道理,导包。import下的type就是我们需要导入的类的全包名。
2,variable是我们需要使用的类,这里其实可以理解为new User(),name是命名,type是类,这样很好理解。
3,如何绑定view?在databinding绑定数据使用符号:@{对象.变量},@{对象.方法}
4,当然一些String,boolean,Interger,float等等,都可以使用,而且这些是不要去import,可以直接使用。

<variable name="name" type="String"/>
<variable name="isTag" type="boolean"/>
<variable name="num" type="float"/>

5,在xml中对象与字符拼接,使用‘’符号。android:text="@{‘姓名’+user.lastName}“
6,在xml中很多语法还是支持的。android:visibility="@{user.img==null?Gone:Visible}“

进一步Activity数据获取与绑定

@Override
protected void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.main_activity);
   User user = new User();
   user.setFirstName("jet");
   user.setLastName("xiao");
   binding.setUser(user);
}

1,这里我们不再使用activity中的setContentView了,

使用DataBindingUtils去setContentView(Activity activity,int layout),去绑定视图,观察源码可以知道其实内部也是

使用Activity的setContentView()去绑定的。在我们编写xml完成后,会自动生存一个ActivityMainBinding类,

这个自动生存是有规则的,(Activity+布局名称+Binding),所以这一点要注意。

ActivityMainBinding这个类会有一个方法是设置xml中的variable对象的,

如我们xml中命名name是user,ActivityMainBinding中会自动生成setUser();方法,提供我们去设置数据源。


2,ActivityMainBinding还提供了我们xml布局中的id控件,不需要使用findViewById()去获取,这个非常的爽。

如上面xml布局中的id->tv_name,在ActivityMainBinding中会自动生成ActivityMainBinding.tvName这个控件非常的便捷。



先简单介绍这里,下节我们介绍在项目listview,include标签,imageview如何绑定url等等的使用。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章