ViewBinding - Android中findViewById的替代方案

发布时间 2023-05-21 15:06:54作者: Devil'soul

谷歌已经把kotlin-android-extensions插件废弃,目前推荐使用ViewBinding来进行替代。

要想使用ViewBinding需要注意两件事。第一确保你的Android Studio是3.6或更高的版本。第二,在你项目工程模块的build.gradle中加入以下配置

android {
   ...  
    buildFeatures {
        viewBinding true
    }
}

OK,全局配置完毕!

当然,如果有些布局文件你不希望为它生成对应的Binding类,可以在该布局文件的根元素下加如下声明

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    ...
    tools:viewBindingIgnore="true">
    ...
</LinearLayout>

一旦启动了ViewBinding功能之后,Android Studio会自动为我们所编写的每一个布局文件都生成一个对应的Binding类。

Binging类的命名规则是将布局文件按驼峰方式重命名后,再加上Binging作为结尾。

假如我们定义了一个activity_main.xml布局文件,那么与之对应的Binging类就是ActivityMainBinding。

接下来我们看一下如何使用ViewBinding来实现在MainActivity中设置TextView内容的功能

class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
binding.textView.text = "Hello"
}

ViewBinding的用法可以说就是这么简单。其中ActivityMainBinding就是activity_main.xml布局文件对应的Binding类,inflate函数用来加载布局,参数接收一个LayoutInflater(在Activity中可以直接获取使用)。接着调用Binding类的getRoot()方法,可以得到activity_main.xml根元素的实例。

注意:我们要把根元素的实例传入到setContentView()函数中,这样Activity就可以显示activity_main.xml这个布局的内容了。

接着调用getTextVew函数可以获取id为textView的元素实例,最后为TextView赋值。

本篇就介绍到这里,如果想了解ViewBinding更多的用法(Frgment、Adapter中使用ViewBinding等知识内容),请查看此连接(郭霖大神总结):

https://cloud.tencent.com/developer/article/1781726?areaSource=102001.13&traceId=VRtiOCCKLXj-fGovGPjiN