0
点赞
收藏
分享

微信扫一扫

ViewBinding上手实践demo

ViewBinding上手实践demo

一、问题背景

日前看了一个GitHub的小项目,涉及到的技术主要是viewBinding和视图组件进行交互、firebath的在线数据库等,感觉还挺有意思。简单介绍下这个viewbinding。

二、问题介绍

在Android&Kotlin语言进行的原生应用开发过程中,组件过多,使用findViewById的方式拿到想要的组件是一件很麻烦和重复的事情,有很多方式对这个进行简化 1)早有ButterKnife,不过已经被作者标记为Deprecated,不被推荐使用; 2)JetPack中的组件:DataBinding,最强大的是它的双向数据绑定,其底层通过Annotation Processor实现的,最近也是在研究jetpeck库,晚点儿会写篇文章介绍下这个。 3)ViewBinding : 视图绑定,使用上感觉更方便,更爽,效率更高。

三、环境要求

这是官方在3.6版本以上推出的,因此要求AndrodiStudio和Gradle版本>=3.6

四、实现demo

1)开启功能 在App module下的Build.gradle中做启用,这个开关是module级别的

android {
    ....
    viewBinding {
        enabled = true
    }
    ...
}

2)新建我们activity并且编写对应的layout布局文件,我的布局文件如下,就一个文本框,一个按钮,比较简单

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".activity.ViewBindingActivity">
    <TextView
        android:id="@+id/txt1"
        android:gravity="center_horizontal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>
    <Button
        android:id="@+id/btn1"
        android:text="btn1"
        android:textAllCaps="false"
        android:layout_gravity="center_horizontal"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>

</LinearLayout>

3)activity代码如下,可以看到,基于上面的layout布局,我们可以拿到对应名称的ViewBinding类,:

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.view.View
import android.widget.Toast

class ViewBindingActivity : AppCompatActivity() {
    lateinit var activityViewBindingBinding : ActivityViewBindingBinding
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        // 传统写法
//        setContentView(R.layout.activity_view_binding)

        // 1、viewBinding的一般写法
        activityViewBindingBinding = ActivityViewBindingBinding.inflate(layoutInflater)
        setContentView(activityViewBindingBinding.root)

        initView()
    }

    fun initView() {
        // 2、直接使用activityViewBindingBinding对象拿到视图中的对应组件
        activityViewBindingBinding.txt1.setText("i am txt1");
        activityViewBindingBinding.btn1.setOnClickListener {
            Toast.makeText(this, "btn1 onclick", Toast.LENGTH_SHORT).show()
        }
    }
}

五、总结

本文介绍了viewBinding的基本使用,时间所限,viewBinding的原理和高级用法有机会的话后续后进一步总结。

举报

相关推荐

0 条评论