Android MVVM 开发模式插件库 Android Data Binding Library

关于MVVM之类的可以自行从网上了解,比如:阮一峰----MVC,MVP 和 MVVM 的图示


Android Data Binding Library可以在layout布局xml文件中绑定数据,实现式图与业务逻辑分离。

相信大家的Gradle和Studio都在2.0以上了,在这些版本上只需要在build.gradle(Module:***)中的添加

 

android {
    .......

    dataBinding{
        enabled = true
}
}

 

 

在工程中建一个javabean,比如:

 

public class User {
    public String name;
    public String phone;
    public boolean isMan;
}

 

 

在activity_main.xml中

 

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:bind="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
    <data>        <variable
name="user"
type="com.zhang.databinding.User" />    </data>
    <LinearLayoutandroid:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{user.name}" />
 </LinearLayout></layout>

 

 

MainActivity的setContentView修改

 

//        setContentView(R.layout.activity_main);
ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_main);

 

 

创建User实例对象

 

User user = new User();
user.name = "Ray";
user.phone = "12345";
user.isMan = true;
binding.setUser(user);

 

 

运行即会显示名字  Ray


Binding类的名字也可以自定义,只需在xml文件中修改<data>

 

<data class="MyDataBinding">

或者<data class=".MyDataBinding">

 

或者<data class="com.zmn.MyDataBinding">


同时Data Binding还支持导入包,android自带的变量,布局引用,表达式,集合,资源文件使用。

 

<data class="MyDataBinding">
    <import type="android.view.View" />
    <import type="java.util.List" />
    <variable
name="user"
type="com.zhang.databinding.User" />
    <variable
name="sex"
type="String" />
    <variable
name="list"
type="List&lt;String>" /> 
<!--//不能使用<符号-->
</data>

 

 


 

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{user.name}" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{sex}" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Ray is a man ."
android:visibility="@{user.isMan?View.VISIBLE:View.GONE}" />
<include
layout="@layout/phone_layout"
bind:user="@{user}" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{list[0]}" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{user.isMan?@string/man:@string/woman}" />

 


引用布局phone_layout.xml

 

<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">    <data>        <variable
name="user"
type="com.zhang.databinding.User" />
    </data>    <LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical">        <TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{user.phone}" />    </LinearLayout>
</layout>

 

 

MainActivity代码如下

 

MyDataBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_main);
User user = new User();
user.name = "Ray";
user.phone = "12345";
user.isMan = true;
binding.setUser(user);
binding.setSex("男");
List<String> list = new ArrayList<>();
list.add("hello");
list.add("data");
list.add("list3");
binding.setList(list);

 

 


 


 

posted @ 2016-11-09 14:37  changchou  阅读(884)  评论(0编辑  收藏  举报