Android DataBinding的基本用法
来源:互联网 发布:mac不能播放视频 编辑:程序博客网 时间:2024/05/29 07:28
一、什么是DataBinding
Google官方提供的文章
DataBinding顾名思义数据绑定,就是一个数据绑定的库,
二、DataBinding所需的环境
Android Studio:1.3及以上 (更新Android Studio)
Gradle版本:1.5及以上
SDK版本:Android 2.1及以上
三、DataBinding的基本用法
(一)开启DataBinding
在Gradle配置一下
android { .... dataBinding { enabled = true }}
这里还有个细节,开启DataBinding之前运行一下程序可以看到classes文件夹是这样的,
开启DataBinding之后再运行一下程序,再来看classes文件夹是这样的,多了一些东西。
<?xml version="1.0" encoding="utf-8"?><layout xmlns:android="http://schemas.android.com/apk/res/android" > <data> <variable name="user" type="com.ce.databindingtest.bean.User" /> </data> <LinearLayout xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.ce.databindingtest.activity.MainActivity"> <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="User name" android:text="@{user.userName}"/> <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="Password" android:text="@{user.password}"/> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:text="Login"/> </LinearLayout></layout>以前我们要操作控件首先要对控件添加个id,然后在Activity中findViewById通过控件id找到它才能进行操作,后来有了ButterKnife这类通过注解来操作控件的库方便了很多,也使得代码更简洁,但也是要给控件添加个id,现在我们用DataBinding不需要添加id了。
从布局中可以看到根标签得是layout,里面第一个标签是data,从第二个标签起才是我们要显示的布局控件的开始,data标签就是数据相关的标签了,里面有个variable标签即变量嘛,既然是变量声明出来当然要有变量名name和类型type(哪个类的变量),在控件中使用的时候用"@{}"进行设置,像上面的布局EditText控件:
android:text="@{user.userName}"(三)User类
package com.ce.databindingtest.bean;public class User { private String userName; private String password; public User() { } public User(String userName, String password) { this.userName = userName; this.password = password; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; }}上面的布局中需要一个User类。
(四)中间类
此时先运行一下程序,再看下。
会发现还多了个ActivityMainBinding.class,这个类的名字是有规律的,前面的是布局的名称,后面再加个Binding,比如我现在的layout的名称是activity_main.xml,这个类的名字就是ActivityMainBinding,如果我把布局名称改为main_layout.xml再运行一下,
现在这个类的名称就是MainLayoutBinding了,点击进去看下,该类是继承自ViewDataBinding的,
public class MainLayoutBinding extends ViewDataBinding
还有个setUser方法和getUser方法。
public void setUser(User user) { this.mUser = user; synchronized(this) { this.mDirtyFlags |= 1L; } this.notifyPropertyChanged(1); super.requestRebind(); } public User getUser() { return this.mUser; }这不就是我们定义的User类么(就是)。
(五)Activity
package com.ce.databindingtest.activity;import android.databinding.DataBindingUtil;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import com.ce.databindingtest.R;import com.ce.databindingtest.bean.User;import com.ce.databindingtest.databinding.ActivityMainBinding;public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main_layout); //使用DataBindingUtil的setContentView设置布局文件 ActivityMainBinding _ViewDataBinding = DataBindingUtil.setContentView(this, R.layout.main_layout); User _User = new User("CE", "123456");// 绑定数据 _ViewDataBinding.setUser(_User); }}这里不需要使用Activity的setContentView()方法加载布局,而是用DataBindingUtil类的setContentView()方法,其实里面也是用传入的Activity调用setContentView()方法,看下DataBindingUtil的setContentView()方法的源码。
public static <T extends ViewDataBinding> T setContentView(Activity activity, int layoutId) { return setContentView(activity, layoutId, sDefaultComponent); } public static <T extends ViewDataBinding> T setContentView(Activity activity, int layoutId, DataBindingComponent bindingComponent) { activity.setContentView(layoutId); View decorView = activity.getWindow().getDecorView(); ViewGroup contentView = (ViewGroup) decorView.findViewById(android.R.id.content); return bindToAddedViews(bindingComponent, contentView, 0, layoutId); }返回的是<T extends ViewDataBinding>类型,我们刚才看的ActivityMainBinding类不就是继承ViewDataBinding的?所以用ActivityMainBinding类来接收,刚才我们也看到该类有个setUser()方法,所以new了个User()对象传进去,运行一下看看。数据就这样被绑定了,是不是感觉很好用?好了,基本使用就这样。
0 0
- Android DataBinding的基本用法
- Android DataBinding (一) 基本用法
- DataBinding系列(二):DataBinding的基本用法
- Android DataBinding 的进阶用法
- DataBinding的基本使用
- Android DataBinding 基础用法一
- Android DataBinding 基础用法二
- Android之MVVM开发模式和DataBinding的简单用法
- DataBinding的基本使用(三)
- DataBinding的基本使用(五)
- Android里的DataBinding
- Android DataBinding(一) 基本使用
- DataBinding用法
- Android数据绑定框架DataBinding用法
- Android数据绑定框架DataBinding用法
- Android的DataBinding原理介绍
- android DataBinding 的简单使用
- DataBinding的基本使用(一)
- 1004. 成绩排名 (20)
- 性能优化六之Lint工具使用
- 【好久没有更新了】关于接下来的博客更新,和最近的情况
- BZOJ1070 修车(zkw费用流 or spfa费用流)
- 1120. Friend Numbers (20)
- Android DataBinding的基本用法
- linux shell 数值比较错误
- STL容器解析之List
- 1121. Damn Single (25)
- 范围确认和范围控制
- HTML的基础知识(1)
- [洛谷P3395]路障题解
- java中的异常类体系
- ORA-16019: cannot use LOG_ARCHIVE_DEST_1 with..