做为一个 Android 开发者,期间很多人在网上分享了很多经验,从中得到了很多帮助,觉得大家都很有分享精神,于是今天开始决定开始写博客,和大家一起分享一些平时用到的知识,更多的是想有一个学习过程的总结,好,开始今天的主题,现在大家在项目的实际开发中很多用到了 MVVM 的开发模式,而说到 MVVM 就不得不提 DataBinding,DataBinding 是谷歌在 2015 年 I/O 大会上介绍的一个数据绑定框架,是实现 MVVM 模式的一个工具,省去了我们原来的 findViewById 去绑定控件,下面来看如何在应用中引入 DataBinding
构建环境
配置你的应用程序使用数据绑定,在应用程序模块 (app module) 的 build.gradle 文件添加数据绑定元素,需要注意的是 Android Studio 的版本需要在 1.3 以上
android {
dataBinding {
enabled = true
}
}
接下来看数据绑定的布局文件
<?xml version="1.0" encoding="utf-8"?> <!--现在的根节点--> <layout xmlns:android="http://schemas.android.com/apk/res/android"> <data> <variable name="user" type="com.example.qiudengjiao.databindingtext.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:layout_gravity="center" android:text="@{user.userName}" android:textSize="30dp" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@{user.userAccount}" /> </LinearLayout> </layout>
和原来我们的布局相比增加了最外层的 layout 根节点,而不是原来的 ViewGroup 根节点,其他的就是增加了 data 和 variable 节点,剩下的基本和我们原来所写的布局文件基本一样,我们来具体分析一下<data> <variable name="user" type="com.example.qiudengjiao.databindingtext.User" /> </data>在 data 节点中声明了一个 user 变量,数据中的 User 变量描述此布局中可能使用的属性,其中 type 属性就是在 java 中定义的 User 类,这里需要注意的是必须把类的完全包名路径写上<TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:text="@{user.userName}" />布局中的表达式使用“@{ }”语法在属性中写入,在这里,TextView 的文本设置为用户 userName 属性数据对象/** * java bean */ public class User { private String userName; private String userAccount; public User(String userName, String userAccount) { this.userName = userName; this.userAccount = userAccount; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getUserAccount() { return userAccount; } public void setUserAccount(String userAccount) { this.userAccount = userAccount; } }数据绑定public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_main); User user = new User("Text","User"); binding.setUser(user); } }这里把原来的 setContentView() 用 DataBindingUtil.setContentView() 替换,注意到生成的 binding 对象 ActivityMainBinding和布局文件的名字是一致的,也就是说如果布局文件的的名称是 activity_mian.xml, 则生成的类就是 ActivityMainBinding,然后创建一个User 对象,通过 setUser() 与 variable 进行绑定,这里需要注意的是 ActivityMainBinding 是自动生成的,所有的 set 方法也是根据variable 名称生成的,数据与 variable 绑定之后,xml 的 UI 元素就可以直接使用了,到这里数据的绑定就算完成了,但是我们在实际项目中往往还需要命令绑定,接下来我们看一下命令的绑定命令绑定我们接着在刚才代码的基础上去写然后再创建一个 Presenter 类,这里我们定义了一个点击事件响应的方法<?xml version="1.0" encoding="utf-8"?> <!--现在的根节点--> <layout xmlns:android="http://schemas.android.com/apk/res/android"> <data> <variable name="user" type="com.example.qiudengjiao.databindingtext.User" /> <variable name="presenter" type="com.example.qiudengjiao.databindingtext.Presenter" /> </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:onClick="@{presenter.onClickCommand}" android:text="@{user.userName}" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@{user.userAccount}" /> </LinearLayout> </layout>public class Presenter { public void onClickCommand(View view) { Toast.makeText(view.getContext(), "点我了", Toast.LENGTH_SHORT).show(); } }
从上面的 xml 文件以及 Presenter 类结合上面的数据绑定,想必我们也能看出规律了,就是在 data 节点下新增一个 variable 节点,并且和Presenter 类进行绑定,需要注意的是 Presenter 里面的方法需要写 View 参数,最后别忘了在 MainActivity 中初始化 Presenter 类public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_main); User user = new User("Text","User"); Presenter presenter = new Presenter(); binding.setPresenter(presenter); binding.setUser(user); } }这样点击事件就绑定成功了,这样我们就完成了数据和点击事件的绑定,这里只做基本介绍,如果大家想更加深入的了解 Data 相关的知识可以点击DataBinding,这是 AndroidDataBinding 的官方网站,这里只做入门简单介绍,另外还有自我翻译的和前面推荐官方网站相对应的详解,请点击 Android DataBinding 详解
269



被折叠的 条评论
为什么被折叠?



