JetPack系列之ViewBinding

viewBinding的作用

启用视图绑定之后,系统会为每个xml生成一个绑定类,我们在使用控件的时候就可以不用findviewbyid这种方式了,可以一定程度避免空指针。视图绑定主要用来替换findViewById。

启用视图绑定

视图绑定可以按模块启用,在需要绑定视图的模块的build.gradle中加入以下代码,启用viewbinding

viewBinding{
    enabled=true
}

同步之后会为每个布局文件生成一个binding文件,每个绑定均包含对根视图以及具有ID的所有视图的引用。

Activity中使用视图绑定

class MainActivity : AppCompatActivity() {

    private var mainBinding:ActivityMainBinding ? = null
    override fun onCreate(savedInstanceState: Bundle?) {
        //使用viewbinding替换原来的R.layout.activity_main
        mainBinding = ActivityMainBinding.inflate(LayoutInflater.from(this))
        // mainBinding!!.root获取根视图,对应Java的getRoot()方法
        setContentView(mainBinding!!.root)
        //直接使用mainBinding为控件赋值,无需使用findviewbyid
        mainBinding!!.tvTest.text = "一个textview"
    }
}

Fragment中使用视图绑定

class ViewBindingFragment : Fragment() {
    private var ktbinding : KtLayoutFragmentBinding? = null
    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        ktbinding = KtLayoutFragmentBinding.inflate(inflater)
        // ktbinding!!.root获取根视图,对应Java的getRoot()方法
        return ktbinding!!.root
    }

    override fun onDestroyView() {
        super.onDestroyView()
        ktbinding = null
    }
}

与findViewByid()相比

视图绑定与传统的findViewById()相比有以下有点

  1. 空安全,视图绑定会创建对视图的直接引用,不会出现以前由于ID不存在导致的空指针异常,如果视图仅出现在布局的某些配置中,则绑定类中包含其引用的字段会使用 @Nullable 标记。
  2. 类型安全 每个绑定类中的字段在视图中都存在一个与之匹配的类型,因此不会出现类型转换错误。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值