Android中view binding的使用

本文介绍了如何在Android项目中启用并利用ViewBinding来简化视图组件的访问,包括在Activity和Fragment中创建和使用绑定类,以及如何处理数据绑定。同时提到了避免生成特定布局绑定类的方法。
摘要由CSDN通过智能技术生成

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" 

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值