• 一起Talk Android吧(第三百八十三回:视图绑定-ViewBinding)


    各位看官们,大家好,上一回中咱们说的是UI框架的例子,这一回中咱们介绍的例子是视图绑定-ViewBinding。闲话休提,言归正转,让我们一起Talk Android吧!

    概念介绍

    看官们,我们说的视图绑定就是指系统自动给xml格式的布局文件生成一个同名的视图绑定类,绑定类的对象(实例)包含布局文件中所有控件。从面向对象的角度看,绑定类是对布局的封装,布局中的控件就是绑定类的属性(成员变量)。

    视图绑定功能主要用来代替findViewById()方法,因此通过视图绑定功能,我们可以更加方便地编写与视图交互的代码。顺便说一下,在官方推出此功能之前我们可以使用butterknife,不过这个库在Android官方推出ViewBinding功能后已经停止更新了,而且库的作者也推荐大家使用ViewBinding.

    明白概念后我对一些细节做补充:

    • 绑定类的名称使用驼峰命名法,布局文件使用下划线,比如activity_main.xml为布局文件名,生成的绑定类名为ActivityMainBinding;
    • 绑定类是在编译时生成的,不像普通类一样有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的组件无法获取到

    
    <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的例子咱们就介绍到这里,欲知后面还有什么例子,且听下回分解!

  • 相关阅读:
    怎么将PDF转换成Excel表格呢?
    高等数学(第七版)同济大学 习题5-4 个人解答
    nuxt使用i18n进行中英文切换
    DDD--战略设计和战术设计
    Linux Framebuffer 实验
    优秀硕士毕业生发言稿
    leetcode每天5题-Day34
    约束的概念和分类(包含外键约束)
    数字化安全方案建设
    WPF控件(二)
  • 原文地址:https://blog.csdn.net/talk_8/article/details/126957805