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属性语法获取对根视图的引用。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"?
另外还有就是与数据绑定,这个我后面有时间再写。。。。?