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"

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

相关推荐
帅得不敢出门27 分钟前
Android设备推送traceroute命令进行网络诊断
android·网络
linweidong28 分钟前
android手势创建及识别保姆级教程
android·屏幕适配·android面试·手势交互·安卓面经·android手势·多分辨率
byte轻骑兵1 小时前
【Bluedroid】蓝牙启动之 SMP_Init 源码解析
android·c++·smp·bluedroid
每次的天空2 小时前
Android第十四次面试总结
android·面试·职场和发展
androidwork3 小时前
Android 布局优化:掌握 <include> 与 <merge> 的实战技巧
android
Jiaberrr3 小时前
uniapp 安卓 APP 后台持续运行(保活)的尝试办法
android·前端·javascript·uni-app·app·保活
gfgfgg0013 小时前
谷歌地图手机版(Google maps)v11.152.0100安卓版 - 前端工具导航
android·智能手机
清霜之辰3 小时前
安卓Compose实现鱼骨加载中效果
android
Shujie_L3 小时前
【Android基础回顾】五:AMS(Activity Manager Service)
android
我又来搬代码了3 小时前
【Android】Android Studio项目代码异常错乱问题处理(2020.3版本)
android·ide·android studio