关于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);