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"

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

相关推荐
雨白5 分钟前
Jetpack系列(二):Lifecycle与LiveData结合,打造响应式UI
android·android jetpack
kk爱闹2 小时前
【挑战14天学完python和pytorch】- day01
android·pytorch·python
每次的天空3 小时前
Android-自定义View的实战学习总结
android·学习·kotlin·音视频
恋猫de小郭4 小时前
Flutter Widget Preview 功能已合并到 master,提前在体验毛坯的预览支持
android·flutter·ios
断剑重铸之日5 小时前
Android自定义相机开发(类似OCR扫描相机)
android
随心最为安5 小时前
Android Library Maven 发布完整流程指南
android
岁月玲珑5 小时前
【使用Android Studio调试手机app时候手机老掉线问题】
android·ide·android studio
还鮟9 小时前
CTF Web的数组巧用
android
小蜜蜂嗡嗡10 小时前
Android Studio flutter项目运行、打包时间太长
android·flutter·android studio
aqi0010 小时前
FFmpeg开发笔记(七十一)使用国产的QPlayer2实现双播放器观看视频
android·ffmpeg·音视频·流媒体