Android中view binding的使用

ViewBinding是 Android 开发中用于替代 findViewById的功能,以更简单、安全的方式访问布局文件中的视图组件。

  1. 在模块级别(我这里只有app模块所以就在app下的) build.gradle文件中启用 View Binding:

android {// 注意在build.gradle已经存在android这个标识,你只要在里面找个位置放下面这两句代码就行

...

buildFeatures {
viewBinding true
}

}

2.接着同步一下,就可以在 Activity 和 Fragment 中使用 View Binding ,方法如下:

在 Activity:

  • 调用生成的绑定类中包含的静态 inflate() 方法。此操作会创建该绑定类的实例以供 Activity 使用。
  • 通过调用 getRoot() 方法或使用kotlin属性语法获取对根视图的引用。
  • 将根视图传递到setContentView,使其成为屏幕上的活动视图。
  • 注意:当前activity的binding类型是Activity名称的倒过来,如:MainActivity-》ActivityMainBinding

import com.example.myapplication.databinding.ActivityMainBinding

class MainActivity : AppCompatActivity() {

private lateinit var binding: ActivityMainBinding // 1.首先获取到当前activity的binding

override fun onCreate(savedInstanceState: Bundle?) {

super.onCreate(savedInstanceState)

binding = ActivityMainBinding.inflate(layoutInflater) // 1.获取当前activity的binding

val view = binding.root //使用kotlin属性语法获取对根视图的引用

setContentView(view)

// 使用 View Binding 访问视图组件,name是TextView的id

binding.tv_name.text = "Hello, View Binding!"

}

}

在Fragment:

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

import com.example.myapplication.databinding.FragmentExampleBinding

class ExampleFragment : Fragment() {

private var _binding: FragmentExampleBinding? = null

private val binding get() = _binding!!

override fun onCreateView(

inflater: LayoutInflater,

container: ViewGroup?,

savedInstanceState: Bundle?

): View? {

_binding = FragmentExampleBinding.inflate(inflater, container, false)

//上面这句是创建该绑定类的实例以供 Fragment 使用

return binding.root //使用Kotlin属性语法 获取对根视图的引用

}

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {

super.onViewCreated(view, savedInstanceState)

// 使用 View Binding 访问视图组件,name是TextView的id

binding.name.text = "Hello, View Binding in Fragment!"

}

override fun onDestroyView() {

super.onDestroyView()

_binding = null // 置空,清除引用

}

}

注意 :Fragment 的存在时间比其视图长。请务必在 Fragment 的 onDestroyView() 方法中清除对绑定类实例的所有引用

另外补充,如果我不想在某一个布局文件生成binding类,则可以使用如下属性添加到布局的根标签中,如下图:

tools:viewBindingIgnore="true"

另外还有就是与数据绑定,这个我后面有时间再写。。。。

相关推荐
xiangpanf9 小时前
Laravel 10.x重磅升级:五大核心特性解析
android
robotx12 小时前
安卓线程相关
android
消失的旧时光-194312 小时前
Android 面试高频:JSON 文件、大数据存储与断电安全(从原理到工程实践)
android·面试·json
dalancon13 小时前
VSYNC 信号流程分析 (Android 14)
android
dalancon13 小时前
VSYNC 信号完整流程2
android
dalancon13 小时前
SurfaceFlinger 上帧后 releaseBuffer 完整流程分析
android
用户693717500138414 小时前
不卷AI速度,我卷自己的从容——北京程序员手记
android·前端·人工智能
程序员Android15 小时前
Android 刷新一帧流程trace拆解
android
墨狂之逸才15 小时前
解决 Android/Gradle 编译报错:Comparison method violates its general contract!
android
耶叶16 小时前
如何在AndroidStudio里面接入你的AI助手
人工智能·android-studio