代码编织梦想


前言,以下为Kotlin语言环境

在android官方文档中,视图绑定可以用于替代findViewById.并且,当启用视图绑定之后,系统会为项目中的每个XML文件生成一个绑定类.绑定类的实例包含其布局中的所有具有ID的直接引用

一、启用视图绑定

在app下的目录下的build.gradle添加

viewBinding{
        enabled = true
    }

如果不想某一个布局文件生成绑定类,那么可以在该布局文件的最外层的Layout中设置属性:tools:viewBindingIgnore=“true”

二、使用步骤

1.假设XML布局名称为activity_main.xml

代码如下(示例):

<LinearLayout
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity"
    android:orientation="vertical"
    >
    <TextView
        android:id="@+id/text1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="测试"
        android:textSize="25sp"
        />
    <Button
        android:id="@+id/text2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="测试"
        android:textSize="25sp" />
    
</LinearLayout>

这个XML布局所生成的绑定类的名称就是:ActivityMainBinding

2.对应的kt文件中的代码(Activity),

android官方给予的步骤是:

  1. 调用生成的绑定类中包含的静态 inflate() 方法。此操作会创建该绑定类的实例以供 Activity 使用。
  2. 通过调用 getRoot() 方法或使用 Kotlin 属性语法获取对根视图的引用。
  3. 将根视图传递到 setContentView(),使其成为屏幕上的活动视图
class MainActivity : AppCompatActivity() {

    private lateinit var binding:ActivityMainBinding
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        //1.创建该绑定类的实例,供予Activity使用
        binding = ActivityMainBinding.inflate(layoutInflater)

        //2.获取对根视图的引用
        /*
        * root属性对应getRoot()方法
        * 为相应布局文件的根视图的直接引用
        * 返回LinearLayout根视图
        * */
        val view = binding.root

        //3.显示出来
        setContentView(view)
        
        //测试部分
        binding.text2.setOnClickListener { 
            binding.text1.text = "变换"
        }
    }
}

从测试部分的代码可以看见,我们无需再去进行复杂的控件绑定和命名,可以直接通过binding对象直接进行引用

3.对应kt文件中的代码(Fragment)

Android官方给的步骤是

  1. 调用生成的绑定类中包含的静态 inflate() 方法。此操作会创建该绑定类的实例以供 Fragment 使用。
  2. 通过调用 getRoot() 方法或使用 Kotlin 属性语法获取对根视图的引用。
  3. 从 onCreateView() 方法返回根视图,使其成为屏幕上的活动视图。

注意:inflate() 方法会要求您传入布局膨胀器。如果布局已膨胀,您可以调用绑定类的静态 bind() 方法。如需了解详情,请查看视图绑定 GitHub 示例中的例子。PS:这一段博主没理解,但以后会深入了解

这里假设Fragment的XML文件名为fragment_one,那么对应的绑定类就是FragmentOneBinding


private var _binding: FragmentOneBinding? = null
    // This property is only valid between onCreateView and
    // onDestroyView.
    private val binding get() = _binding!!

    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
    
        _binding = FragmentOneBinding.inflate(inflater, container, false)
        val view = binding.root
        
        return view
    }
	//关于这一步,Android官方给出的解释是,fragment的存在时间比其视图长,所以需要重写这个方法,清楚对绑定类实例的所有引用
    override fun onDestroyView() {
        super.onDestroyView()
        _binding = null
    }

与findViewById的区别

与使用 findViewById 相比,视图绑定具有一些很显著的优点:

  1. Null 安全:由于视图绑定会创建对视图的直接引用,因此不存在因视图 ID 无效而引发 Null指针异常的风险。此外,如果视图仅出现在布局的某些配置中,则绑定类中包含其引用的字段会使用 @Nullable 标记。

  2. 类型安全:每个绑定类中的字段均具有与它们在 XML 文件中引用的视图相匹配的类型。这意味着不存在发生类转换异常的风险。

这些差异意味着布局和代码之间的不兼容将会导致构建在编译时(而非运行时)失败。

博主的想法

我觉得视图绑定是比findViewById好用的,我在实际开发中,总是在对控件命名时,用一大段的进行命名,比如fragment下的tButton提交控件:我命名为fragment_submit,因为主要是在编写kt代码时,比较好寻找,有了视图绑定,就可以直接命名为submit,不需要我再去命名一长串作为区分了

最后附上对应的Android官方文档链接

视图绑定

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/GS8FG/article/details/128859606

android kotlin中DataBinding视图绑定数据-爱代码爱编程

上一篇文章 细说DataBinding,我们介绍了DataBinding以及DataBinding的简单的使用。可以看到,我们上一篇文章只是简单介绍了一下DataBinding,并没有详细介绍如何动态的加载数据。也就是说,这篇文章,我们将介绍,如何使用DataBinding让视图跟随这数据进行刷新变化。 观察者模式 观察者模式(Observer)完美的将

全新的视图绑定工具 — ViewBinding 使用指南-爱代码爱编程

前言 我们在Android开发的过程中总是需要获取XML布局中的ViewId,以便给其赋值进行显示,早期我们只能使用 findViewById 这个API,会导致很多的模版代码出现。2013年左右Android界大神 Jake Wharton开源了Butter Knife框架,通过Bind(“viewid”)方式方便开发者获取ViewId。近两年由于谷歌

Android视图绑定ViewBinding的使用-爱代码爱编程

前言 后台读者留言:能否写一篇视图绑定ViewBinding相关的内容? 首先感谢这位读者的提议,让我抽出时间细看视图绑定的内容,也打算在项目中使用该功能。当然,还有其他读者提议的内容我已记录,后期有时间也会陆续更新。话不多说,我们开始学习吧! 概述 在我们的开发过程中,需要获取XML布局文件中的ViewId,以便其赋值显示,我们习惯使用findV

Android架构组件____视图绑定-爱代码爱编程

Android架构组件____视图绑定 Android架构____视图的绑定视图绑定 文章目录 Android架构组件____视图绑定前言一、视图绑定二、使用步骤1.引入库2.忽略某个布局文件2.布局文件和对应绑定类的生成3.如何使用总结与 findViewById 的区别与数据绑定的对比反过来,与数据绑定相比,视图绑定也具有以下限制:

如何在recyclerview适配器中使用视图绑定-爱代码爱编程

View binding is a feature that allows you to more easily write code that interacts with views. Once view binding is enabled in a module, it generates a binding class

安卓视图绑定-爱代码爱编程

视图绑定 在模块中启用视图绑定之后,系统会为该模块中的每个 XML 布局文件生成一个绑定类,可以替换findViewById方法官网文档 启用 在build.gradle中写入一下代码 android { ... viewBinding { enabled = true } }

Android—视图绑定viewBinding-爱代码爱编程

通过视图绑定功能,您可以更轻松地编写可与视图交互的代码。在模块中启用视图绑定之后,系统会为该模块中的每个 XML 布局文件生成一个绑定类。绑定类的实例包含对在相应布局中具有 ID 的所有视图的直接引用。 在大多数情况下,视图绑定会替代 findViewById。 设置说明 注意:视图绑定在 Android Studio 3.6 Canary 11 及

Android之视图绑定-爱代码爱编程

文章目录 viewBinding添加支持页面使用绑定类与idgetRootactivity使用fragment使用优势与 findViewById 的区别与数据绑定的对比 官方文档 视图绑定主要是替代findViewById功能的,使用视图绑定可以减少依赖和重复代码 viewBinding 在AndroidStudio3.6以上使用 使用

ViewBinding - Jetpack 视图绑定委托封装及使用示例-爱代码爱编程

通过视图绑定功能,您可以更轻松地编写可与视图交互的代码。在模块中启用视图绑定之后,系统会为该模块中的每个 XML 布局文件生成一个绑定类。绑定类的实例包含对在相应布局中具有 ID 的所有视图的直接引用。 在大多数情况下,视图绑定会替代 findViewById。 ⚠️ Kotlin Android Extensions 已弃用,这意味着不再

视图绑定(ViewBinding )与数据绑定(Databinding)-爱代码爱编程

视图绑定(ViewBinding )与数据绑定(Databinding) 什么是ViewBinding viewbinding是android jetpack的一个特性,通过viewbinding功能,您可以更轻松地编写可与视图交互的代码。在模块中启用viewbinding之后,系统会为该模块中的每个 XML 布局文件生成一个绑定类。绑定类的实例包含对

Android-视图绑定-爱代码爱编程

举例: 此时,first_layout.xml中定义了一个button且id为button1的按钮。 在FirstActivity中我们想要调用这个按钮的话,有两种方法。 第一种,通过FindViewById(R.id.button1)得到button对象,此方法在button等控件数量较多时,就会显得十分繁琐第二种,通过视图绑定功能 步骤:1.首先在

Android ViewBinding 使用指南— 全新的视图绑定工具-爱代码爱编程

通过视图绑定功能,您可以更轻松地编写可与视图交互的代码。在模块中启用视图绑定之后,系统会为该模块中的每个 XML 布局文件生成一个绑定类。绑定类的实例包含对在相应布局中具有 ID 的所有视图的直接引用。 Tip:Viewbinding在 Android Studio 3.6 Canary 11 及更高版本中可用,现在应该没有谁的AS版本低于3.6了吧!

android技术知识点:如何使用视图绑定来消除findviewbyid()_未来喵匠的博客-爱代码爱编程

遇到问题 每次在创建或重新创建视图后使用findViewById()函数来获取对它的引用时,Android 系统都会在运行时遍历视图层次结构来查找它。当您的应用只有少数视图时,这不是问题。然而,生产应用程序可能在一个布局中有几十个视图,即使有最好的设计,也会有嵌套的视图。 考虑一个包含滚动视图的线性布局,该滚动视图包含一个文本视图。对于较大或较深的视图

视图绑定._tzztzz01的博客-爱代码爱编程

  在大多数情况下,视图绑定会替代 findViewById。 视图绑定功能可按模块启用。要在某个模块中启用视图绑定,请将 viewBinding 元素添加到其 build.gradle 文件中,如下例所示:  android { ... viewBinding { enabled

android studio 开启视图绑定 viewbinding-爱代码爱编程

Google 在 Android Studio 3.6 Canary 11 及更高版本中提供了一个 viewBinding 的开关,可以开启视图绑定功能,以此来替代 findViewById。 viewBinding功能可

一起talk android吧(第三百八十三回:视图绑定-爱代码爱编程

文章目录 概念介绍使用步骤1.在配置文件中(模块级的build.gradle)激活视图绑定;2.创建Activity并且创建xml格式的布局文件,并且在布局文件中添加UI组件;3.在Activity的代码文件中