本文主要是介绍Android-Data Binding,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
(PS:文章内容为参考Android developer 翻译所得成果.)
简介
Data binding
在2015年7月发布的Android Studio v1.3.0 版本上引入,在2016年4月Android Studio v2.0.0 上正式支持。目前为止,Data Binding
已经支持双向绑定了。
Databinding
是一个实现数据和UI绑定的框架,是一个实现 MVVM
模式的工具,有了 Data Binding
,在Android中也可以很方便的实现MVVM开发模式。
Data Binding
是一个support库,最低支持到Android 2.1(API Level 7+)。
Data Binding 之前,我们不可避免地要编写大量的毫无营养的代码,如 findViewById()、setText(),setVisibility(),setEnabled()
或 setOnClickListener()
等,通过 Data Binding
, 我们可以通过声明式布局以精简的代码来绑定应用程序逻辑和布局,这样就不用编写大量的毫无营养的代码了。
使用
只需在build.gradle
文件中添加依赖即可,文件形式如下:
android {compileSdkVersion 25buildToolsVersion "25.0.0"defaultConfig {....dataBinding{enabled true}}...
}
如上指定dataBinding enabled
为true即可。
例子
接下来,我们编写一个简单的DataBinding
的例子,首先按照指导,创建与视图绑定的实体类(PS:以最常见的User为例),该类拥有三个属性,具体内容如下:
public class User {public static final String TAG = "User";private int userImage;private String userName;private String userLocation;public User(int userImage, String userName, String userLocation) {this.userImage = userImage;this.userName = userName;this.userLocation = userLocation;}public User() {}public int getUserImage() {return userImage;}public void setUserImage(int userImage) {this.userImage = userImage;}public String getUserName() {return userName;}public void setUserName(String userName) {this.userName = userName;}public String getUserLocation() {return userLocation;}public void setUserLocation(String userLocation) {this.userLocation = userLocation;}
}
创建与该类绑定的布局文件:
<?xml version="1.0" encoding="utf-8"?>
<layout
xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"><data><variable
name="user"type="packageName.User" /></data><LinearLayout
android:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="horizontal"><LinearLayout
android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_margin="5dp"android:orientation="horizontal"android:padding="10dp"><ImageView
android:layout_width="50dp"android:layout_height="50dp"android:src="@mipmap/ic_launcher"/><LinearLayout
android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_gravity="center_vertical"android:layout_marginLeft="10dp"android:orientation="vertical"><TextView
android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@{user.userName}"android:textAppearance="?android:attr/textAppearanceMedium"android:textColor="@android:color/black"tools:text="Name" /><TextView
android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@{`` + user.userLocation}"android:textColor="@android:color/black"tools:text="Location" /></LinearLayout></LinearLayout></LinearLayout>
</layout>
从上面布局文件可以看出,其需要声明一个variable抽象对象,所有布局中控件的具体内容依赖于该抽象对象的成员变量,另外需要注意根布局是layout
,且没有layout_width
和layout_height
属性。
修改MainActivity.java
的onCreate()
函数如下所示:
@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState); mRecyclerView.setAdapter(mRecyclerViewAdapter);RecyclerItemBinding binding = DataBindingUtil.setContentView(this, R.layout.recycler_item);User user = new User(R.mipmap.ic_launcher,"Test", "User");binding.setUser(user);}
这里需要注意,XXXXXBinding.java
这个类是根据你需要绑定的布局文件动态生成的,make 工程
后就会出现,生成规则遵循驼峰命令法,例如说,布局文件名为main_activity.xml,
则生成的类为MainActivityBinding.java
,这里我的布局文件名为recycler_item.xml
,所以生成的类为RecyclerItemBinding.java
参考链接
google developer
Android-Data-Binding-系列-一-详细介绍与使用
这篇关于Android-Data Binding的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!