Jetpack之ViewBinding

2023-05-16

ViewBinding 的作用:代替findViewById,还可以保证空安全和类型安全。
基本原理:会为每一个布局xml文件生成一个视图绑定类,类名称是布局文件名转化为UpperCamelCase + Binding。如布局文件为activity_main,那么将会生成一个类,类名为ActivityMainBinding。通过生成对象根节点对象就可以找到对应的Id。

基本用法:
build.gradle添加如下配置

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

对于不需要生成绑定类的布局xml文件,在根节点添加下面的属性tools:viewBindingIgnore="true"

在Activity中使用

布局文件

<-- activity_main.xml -->
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <TextView
        android:id="@+id/btn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
    <TextView
        android:id="@+id/tv"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:layout_constraintTop_toBottomOf="@id/btn"
        android:layout_marginTop="20dp"
        android:textSize="20sp"
        android:text="hello view"
        android:gravity="center"/>
</androidx.constraintlayout.widget.ConstraintLayout>

程序中:

class MainActivity : AppCompatActivity() {
    private lateinit var binding: ActivityMainBinding
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        // 实例化绑定视图
        binding = ActivityMainBinding.inflate(layoutInflater)
        // 获取根节点的引用
        val view = binding.root
        // 让根节点视图成为获得视图
        setContentView(view)
        // 引用视图上的控件
        binding.btn.setOnClickListener {
            binding.tv.text = "Binding View"
        }
    }
}

在Fragment中使用

主布局里面的fragment标签必须要有id。Fragment中的代码如下:

class TestFragment:Fragment() {
    private var _binding : TestFrameBinding? = null
    private val binding get() = _binding!!
    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View {
        _binding = TestFrameBinding.inflate(inflater,container, false)
        return binding.root
    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        binding.frameBtn.setOnClickListener {
            binding.frameBtn.text = "clicked"
        }
    }

    override fun onDestroy() {
        super.onDestroy()
        // Fragment的存活时间比View长,在其onDestroy()方法中清除对绑定类实例的所有引用
        _binding = null
    }
}

RecyclerView中

class TestAdapter(list: List<String>) : RecyclerView.Adapter<TestAdapter.ViewHolder>() {
    private var mList: List<String> = list

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
        // 需在此初始化以获得父类容器
        val binding = ItemTestBinding.inflate(LayoutInflater.from(parent.context), parent, false)
        return ViewHolder(binding)
    }

    override fun onBindViewHolder(holder: ViewHolder, position: Int) {
        holder.tvItem.text = "Adapter"
    }

    override fun getItemCount() = mList.size

    // 传递Binding对象
    class ViewHolder(binding: ItemTestBinding) : RecyclerView.ViewHolder(binding.root) {
        var tvItem: TextView = binding.tvItem
    }
} 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Jetpack之ViewBinding 的相关文章

  • ViewBinding和ButterKnife

    一 ViewBinding和ButterKnife比较 xff1a 传送门 1 ButterKnife一个好处就是不用写findViewById xff0c 另一个好处就是不用写setOnClickListener之类的 xff0c 满屏幕
  • Android ViewBinding 替换 findViewById 的神器

    ViewBinding中文官网 ViewBinding 的出现就是为了替代 findViewById 的 以前我们写完布局后就要在代码中使用 findViewById 方法找到 xml 文件中对应的 view xff0c 这样耗时费力 xf
  • Jetpack之ViewBinding

    ViewBinding 的作用 xff1a 代替findViewById xff0c 还可以保证空安全和类型安全 基本原理 会为每一个布局xml文件生成一个视图绑定类 xff0c 类名称是布局文件名转化为UpperCamelCase 43
  • Jetpack学习-6-Viewbinding使用及简单分析

    Jetpack可以帮助开发者减少样板代码 而findviewbyId正是需要减少的样板代码 于是就有了ViewBinding 一开始我细看Jetpack的各个组件我是懵的 里面没有ViewBinding 这不好把它归纳到Jetpack系列中
  • ViewBinding使用入门

    ViewBinding 参考资料 新技术 ViewBinding 最佳实践 amp 原理击穿 更多 ViewBinding 的封装思路 1 kotlin android extensions KAE 的问题 根据Google官方的说法 KA
  • Jetpack DataStore 你总要了解一下吧?

    目录 一 DataStore 介绍 Preferences DataStore 和 Proto DataStore 二 Preferences DataStore 2 1 添加依赖 2 2 使用 Preferences DataStore
  • Android Studio 3.6新功能ViewBinding解析

    Android Studio使用技巧 看这一篇就够了 Google官方在2020年3月份发布了Android Studio3 6的版本 xff0c 此版本增加了很多新的功能 xff0c 其中一大亮点功能就是ViewBinding ViewB
  • Jetpack新成员,Paging3从吐槽到真香

    各位小伙伴们大家早上好 随着Android 11的正式发布 xff0c Jetpack家族也引入了许多新的成员 我之前有承诺过 xff0c 对于新引入的App Startup Hilt Paging 3 xff0c 我会分别写一篇文章进行介
  • Jetpack Compose 从入门到入门(三)

    本篇开始介绍Jetpack Compose 中的修饰符Modifier 修饰符可以用来执行以下操作 xff1a 更改可组合项的大小 布局 行为和外观 添加信息 xff0c 如无障碍标签 处理用户输入 添加高级互动 xff0c 如使元素可点击
  • Jetpack Compose 从入门到入门(九)

    本篇是Compose的手势部分 点击 添加clickable修饰符就可以轻松实现元素的点击 此外它还提供无障碍功能 xff0c 并在点按时显示水波纹效果 span class token annotation builtin 64 Comp
  • Linux中如何查Jetson Nano中jetpack的版本

    命令 xff1a cat etc nv tegra release 如下图所示 xff0c 输入的内容为 R32 release REVISION 5 1 GCID 26202423 BOARD t210ref EABI aarch64 D
  • Jetson tx2 安装jetpack_3.3手动安装cuda9.0,cudnn7.1

    1 刷机前的准备 xff08 写在前面的话 xff09 装有Ubuntu16 04或者Ubuntu18 04的电脑 xff0c 这里说的电脑可以是台式机也可以是笔记本与TX2区分开来 xff08 电脑是16 04或者18 04无所谓 xff
  • (Jetpack TX2)ubuntu上aarch64安装anaconda3

    1 在终端中输入sudo uname a可以查看ubuntu的信息 2 系统是aarch64 xff0c 它既不是64 Bit x86 也不是64 Bit Power8 and Power9 xff0c 所以使用anaconda官网 htt
  • TX2安装jetpack

    目前官网支持的下载为JetPack L4T 3 2 1 linux x64 b23和JetPack L4T 3 3 linux x64 b39 首先使用具有Ubuntu16 04的host主机 xff08 我使用的是个人笔记本 xff0c
  • Jetpack学习之WorkManager

    绝大部分应用程序都有在后台执行任务的需求 根据需求的不同 Android为后台任务提供了多种解决方案 如JobScheduler Loader Service等 WorkManager为应用程序中那些不需要及时完成的任务提供了一个统一的解决
  • Compose 获取当前屏幕方向是横屏还是竖屏

    从本地配置读取方向属性 共三个值 LocalConfiguration current orientation 对应的属性值在android content res Configuration类里 public static final i
  • Jetpack-Compose 学习笔记(五)—— State 状态是个啥?又是新概念?

    系列第五篇 进入 Compose 中有关 State 状态的学习 前面几篇笔记讲了那么多内容 都是基于静态界面的展示来说的 即给我一个不变的数据 然后将它展示出来 如何在 Compose 中构建一个随数据而变化的动态界面呢 相信看完这篇就知
  • Github上 简单易用的 Android ViewModel Retrofit框架

    RequestViewModel 长期更新 支持网络请求的ViewMode框架 ViewModel LiveData Retrofit github 地址 https github com miaotaoii RequestViewMode
  • Nvidia TX2 刷机教程 JetPack-L4T-3.0-linux-x64.run

    前言 本教程特别针对刷机被墙的朋友 如果没有被墙 其实按照官方文档一步一步操作就行 这期间我参考了特别多的网页 也去nvidia官方论坛问过 其实截止到2019年2月16日 jetpack3 3 是可以很轻松的被装上的 主要是3 0被墙 而
  • Navigation Preview unavailable in Android Studio 3.4 Preview

    Navigation Preview unavailable in Android Studio 3 4 Preview 最近在学Jetpack Navigation组件 但是在写navigation资源文件的时候 Preview 显示不出

随机推荐

  • ERD Online 4.0.0 免费私有部署方案

    文章目录 1 快速安装2 前置条件 3 一键安装 4 兼容性列表4 1 云主机兼容性列表4 2 虚拟机兼容性列表 1 快速安装 ERD Online的服务理念 xff1a 能喂到嘴里 xff0c 绝不递到手里 2 前置条件 一台至少配置为
  • mysql: error while loading shared libraries: libtinfo.so.5 解决办法

    Centos8中安装mysql8 xff0c 服务启动后 xff0c 连接服务时报错为以下错误信息 mysql error span class token keyword while span loading shared librari
  • trilead-ssh2连接不上centos服务器Caused by: java.io.IOException: Cannot negotiate, proposals do not match.

    导致此问题的原因是ssh升级后 xff0c 为了安全 xff0c 默认不在采用原来一些加密算法 xff0c 我们手工添加进去即可 1 步骤一 修改ssh的配置文件 etc ssh sshd config 搜索KexAlgorithms xf
  • macos安装nvm

    文章目录 1 概述2 安装注意事项3 安装nvm 1 概述 nvm 即 node version manager xff0c 好处是方便切换 node js 版本 2 安装注意事项 卸载从node官网下载pkg安装的nodesudo rm
  • Linux下生产者消费者问题的C语言实现

    注 xff1a 查看全文请关注作者 xff0c 或点击前往 xff1a 生产者 消费者问题的C语言实现 实验六 生产者 消费者问题实现 实验题目 要求 在Linux操作系统下用C实现经典同步问题 xff1a 生产者 消费者 xff0c 具体
  • ftpClient文件上传成功但总是返回false

    ftpClient storeFile newFileName is xff1b 文件上传成功但总是返回false flag span class token operator 61 span ftpClient span class to
  • “佛祖保佑“代码注释

    注释如下 oo0oo o8888888o 88 34 34 88 0 61 0 96 39 39 39
  • android带视频和图片的轮播(banner)解决方案

    方案只包含一个视频和多张图片 xff0c 如果又多个视频的 xff0c 可以修改适配器中的的播放器为一个list xff0c 并且在滑动中做相应的释放操作 一 xff1a 实现一个视频和多张图片的轮播banner 使用到第三方框架有 1 轮
  • Android灯光系统(硬件访问服务框架)

    Android灯光系统 硬件访问服务框架 Java类 xff1a LightsService java LightsService java通过调用 xff0c LightsService JNI来实现com android server包
  • Ubuntu16.04简易安装pycharm社区版

    1 首先到官网下载linux版本的pycharm xff0c 为了使用方便 xff0c 直接安装社区版 https www jetbrains com pycharm download section 61 linux xff08 因为虚拟
  • vue 严格格式问题

    用vue cli脚手架搭建开发环境 xff0c 会自动安装eslint严格格式 xff0c 如果代码格式不按照严格模式写 xff0c 会经常报警告 xff08 如缩进4个空格会警告 xff09 xff0c 如下图是一些警告类型 xff1a
  • vue watch深度监控一个对象下新增属性不生效问题

    先简单还原下项目中遇到的问题 xff1a adc为一个空对象 xff0c watch深度监听abc下的pageNum属性 xff08 此时还没有 xff09 data return abc watch 39 abc 39 deep true
  • python 归并排序

    归并排序 xff08 Merge Sort xff09 是一种典型的递归法排序 它把复杂的 排序过程分解成一个简单的合并子序列的过程 至于怎么得到这个子 序列 xff0c 就得自己调用自己了 归并排序首先要做的就是将数列分成左右两部分 xf
  • 面试之Spring的启动原理

    引入 为什么突然说一下Spring启动原理呢 xff0c 因为之前面试的时候 xff0c 回答的那可谓是坑坑洼洼 xff0c 前前后后 xff0c 补补贴贴 总而言之就是不行 xff0c 再次看一下源码发掘一下 在Spring Boot还没
  • Zabbix5.0钉钉告警实战

    1 服务器环境准备 xff08 Centos7 6 xff09 1 服务器1 xff1a zabbix服务端 服务器2 xff1a 客户端 2 客户端服务器上安装agent xff0c 并且安装httpd服务 xff0c 在zabbix网页
  • c++项目实战---->QT文件日志输出

    QT说明文档 xff08 输出详细日志 xff09 span class token macro property span class token directive keyword include span span class tok
  • linux下将Qt程序打包成deb文件,发布、安装及使用,ubuntu和银河麒麟下可用

    本次测试为在ubuntu打包程序为deb文件包 xff0c 然后再Ubuntu和银河麒麟下安装测试 xff0c 均可使用 1 Qt下Release模式编译工程文件 xff0c 文件名为wapp 2 创建如下基本目录结构 本目录结构在 目录下
  • Python制作简单的加法计分器

    运行结果如下图 代码如下 oo0oo o8888888o 88 34 34 88 0 61 0 96 39 39 39
  • Spring的学习之路(二)的Spring详细配置bean的基础配置

    1 xml的提示配置 1 1 Schema的配置 lt xml version 61 34 1 0 34 encoding 61 34 UTF 8 34 gt lt beans xmlns 61 34 http www springfram
  • Jetpack之ViewBinding

    ViewBinding 的作用 xff1a 代替findViewById xff0c 还可以保证空安全和类型安全 基本原理 会为每一个布局xml文件生成一个视图绑定类 xff0c 类名称是布局文件名转化为UpperCamelCase 43