一起Talk Android吧(第三百八十三回:视图绑定-ViewBinding)
Posted talk_8
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一起Talk Android吧(第三百八十三回:视图绑定-ViewBinding)相关的知识,希望对你有一定的参考价值。
文章目录
各位看官们,大家好,上一回中咱们说的是UI框架的例子,这一回中咱们介绍的例子是视图绑定-ViewBinding。闲话休提,言归正转,让我们一起Talk android吧!
概念介绍
看官们,我们说的视图绑定就是指系统自动给xml格式的布局文件生成一个同名的视图绑定类,绑定类的对象(实例)包含布局文件中所有控件。从面向对象的角度看,绑定类是对布局的封装,布局中的控件就是绑定类的属性(成员变量)。
视图绑定功能主要用来代替findViewById()
方法,因此通过视图绑定功能,我们可以更加方便地编写与视图交互的代码。顺便说一下,在官方推出此功能之前我们可以使用butterknife,不过这个库在Android官方推出ViewBinding
功能后已经停止更新了,而且库的作者也推荐大家使用ViewBinding
.
明白概念后我对一些细节做补充:
- 绑定类的名称使用驼峰命名法,布局文件使用下划线,比如
activity_main.xml
为布局文件名,生成的绑定类名为ActivityMain
; - 绑定类是在编译时生成的,不像普通类一样有class声明,创建绑定类对象也不使用new关键字;;
- 视图绑定功能打开后项目中所有布局文件都会生成绑定类,如果某个布局文件不想生成绑定类可以单独关闭此功能,方法如下:
<LinearLayout
...
tools:viewBindingIgnore="true" >
</LinearLayout>
- 布局文件中的控件如果没有ID就不会出现在视图绑定类中,控件的ID就是类中属性的名称,命名方式和视图绑定类一样,比如控件的id是:
id_button_search
,属性名是IdButtonSearch
;
使用步骤
明白视图绑定的概念后,我们通过文字结合代码的方式来介绍如何使用视图绑定功能。
1.在配置文件中(模块级的build.gradle)激活视图绑定;
android
...
viewBinding
enabled = true
2.创建Activity并且创建xml格式的布局文件,并且在布局文件中添加UI组件;
注意:布局文件中的UI组件一定要有id,没有ID的组件无法获取到
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/id_tv_view_bind_title"
android:layout_gravity="center"
android:layout_width="wrap_content"
android:layout_height="wrap_content"></TextView>
<Button
android:id="@+id/id_bt_view_bind_button"
android:layout_gravity="center"
android:text="Change Text"
android:textAllCaps="false"
android:layout_width="wrap_content"
android:layout_height="wrap_content"></Button>
</LinearLayout>
3.在Activity的代码文件中使用inflate()方法获取ViewBinding类的对象;
4.通过ViewBinding类的对象获取布局文件的根视图,然后将它和代码绑定;
private ActivityViewBindingExBinding mViewBinder;
mViewBinder = ActivityViewBindingExBinding.inflate(getLayoutInflater());
mView = mViewBinder.getRoot(); //获取根视图
setContentView(mView);//布局和代码绑定
5.使用ViewBinding对象获取布局中的UI组件然后使用
注意:布局中UI组件的名称就是组件的id,只不过把分隔字母的下划线换成了大写字母;
//使用ViewBinding对象获取布局中的Button组件然后添加监听器
mViewBinder.idBtViewBindButton.setOnClickListener(v -> changeText());
private void changeText()
//使用ViewBinding对象获取布局中的TextVeiw组件然后修改显示文本
mViewBinder.idTvViewBindTitle.setText("Text is changed!");
对比与总结
使用视图绑定可以替代 findViewById()
方法,不过它们之间还是有一些差别:
-
Null 安全:
视频绑定类是在编译时生成的,如果布局中有无效的控件 ID会提前发现,不会在程序运行时因为无效的控件ID而发生 Null指针异常; -
类型安全:
视图绑定类中的属性类型与它们在 XML布局文件中引用的视图类型完全相同,我们不需要做强制的类转换,进而避免因为强制类型转换而引起的异常;
看官们,关于Android中视图绑定-ViewBinding的例子咱们就介绍到这里,欲知后面还有什么例子,且听下回分解!
以上是关于一起Talk Android吧(第三百八十三回:视图绑定-ViewBinding)的主要内容,如果未能解决你的问题,请参考以下文章
一起Talk Android吧(第四百八十三回:如何修改Spinner的倒三角)
一起Talk Android吧(第三百八十八回:lifecycle)
一起Talk Android吧(第三百八十八回:lifecycle)
一起Talk Android吧(第三百八十七回:LiveData)