您的位置:首页 > 移动开发 > Android开发

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

2016-11-09 14:37 639 查看
关于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>

<LinearLayout
android: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<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);



                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: