关于我使用的安卓View Binding方式

2023-05-16

方案有:

ButterKnife
findViewById()
View Binding

下面看下View Binding在下面的场景怎么使用

Activities
Fragments:
    Inflate
    Bind
RecyclerView Adapter

一、Enabling View Binding
android {

// module级别的build.gradle文件中添加下名的配置
// 会自动为xml文件生成binding class
// 命名规则是Pascal case  + Binding
// 可在XML中添加属性来屏蔽生成binding class
// tools:viewBindingIgnore="true"
buildFeatures {
    viewBinding true
}

}
二、Using View Binding in Activities
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.myButton.setOnClickListener { // Button Tapped }
binding.myTextView.text = “View Binding is the best!”
三、Using View Binding in Fragments
inflate methos
class DemoInflateFragment : Fragment() {

private var fragmentDemoBinding: FragmentDemoBinding? = null

// 注意是在onCreateView中inflate内容,所以AsyncLayoutInflater不适应Fragment
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
    val binding = FragmentDemoBinding.inflate(inflater, container, false)
    fragmentDemoBinding = binding

    binding.myButton.setOnClickListener {
         // Button Tapped
    }

    binding.myTextView.text = "View Binding is the best!"

    return binding.root
}
override fun onDestroyView() {
    // View不见时Fragment可以存在
    fragmentDemoBinding = null
    super.onDestroyView()
}  

}
Bind method
class DemoBindFragment : Fragment(R.layout.fragment_demo) {

private var fragmentDemoBinding: FragmentDemoBinding? = null

// 构造方法中传入了,resId,默认的onCreateView中会inflate内容,此时只需要bind即可
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
    super.onViewCreated(view, savedInstanceState)
    val binding = FragmentDemoBinding.bind(view)
    fragmentDemoBinding = binding

    binding.myButton.setOnClickListener { // Button Tapped }
    binding.myTextView.text = "View Binding is the best!"
}
override fun onDestroyView() {
    // View不见时Fragment可以存在
    fragmentDemoBinding = null
    super.onDestroyView()
}        

}
四、Using View Binding in RecycleView Adapter
class Items_RVAdapter(private var itemsCells: ArrayList<String?>) : RecyclerView.Adapter<RecyclerView.ViewHolder>() {

 // 第一步,使用binding class作为root layout
class ItemViewHolder(var viewBinding: ItemRowBinding) : RecyclerView.ViewHolder(viewBinding.root)

// 第二步,inflate内容并返回ItemViewHolder
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
    val binding = ItemRowBinding.inflate(LayoutInflater.from(parent.context), parent, false)
    return ItemViewHolder(binding)
}
// 第三步,直接使用了
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
    val itemViewHolder = holder as ItemViewHolder
    itemViewHolder.viewBinding.itemtextview.text = itemsCells[position]
}

}

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

关于我使用的安卓View Binding方式 的相关文章

随机推荐

  • 工作生活篇之第九篇

    工作生活篇之第九篇 一直觉得这世上告别仪式挺多的 xff0c 比如喝酒 旅行 xff0c 或干脆痛哭一场 xff0c 可是后来才知道 xff0c 人生中大部分告别是悄无声息的 xff0c 原来某天的相见 xff0c 竟已是最后一面 xff0
  • Java自定义输出JSON格式

    如何自定义输出数据Json格式解决办法 平时默认的json输出格式为 xff1a span class token punctuation span span class token string 34 id 34 span span cl
  • SpringCloud常见问题 -- 启动多个服务

  • Spring框架 -- 项目启动及配置(一)

    Spring 容器启动大致流程 Spring 基础 IDEA项目Maven搭建结构 idea src src main java 自建 src main resource 自建 src main resource dev 自建 src ma
  • 【ZYNQ】裸机 PS + PL 双网口实现之 lwip 库文件修改

    因项目需要 xff0c 为实现 Zynq 裸机双网口通信功能 xff0c 其中 ENET0 连接 PS 端网口 xff0c ENET1 通过 EMIO 扩展连接 PL 端网口 xff0c 原 Lwip 库无板载 PHY 芯片支持及 EMIO
  • openstack删除nova service-list中的computer服务列表流程

    文章目录 说明 删除流程 nova服务查看 修改主机名 关闭准备删除的nova服务 删除nova服务 删除agent服务 创建虚拟机测试 说明 如下图 同一个计算节点主机名有2个 造成这种原因就是单纯的改主机名了 因为正常来说计算节点nov
  • spring— Bean标签scope配置和生命周期配置

    scope配置 singleton 默认值 xff0c 单例的prototype 多例的request WEB 项目中 xff0c Spring 创建一个 Bean的对象 xff0c 将对象存入到 request 域中session WEB
  • 对项目的梳理、流程和总结

    过程 我在制作 中国汽车技术研究中心 的一个演讲PPT前 xff0c 也已经有第一版的基础了 xff0c 不过 xff0c 第一版的PPT客户并不满意 xff0c 因为这个风格不是客户想要的 xff0c 所以客户对第一版的PPT并不是很满意
  • Linux中添加用户设置权限并实现远程登录

    1 username 为你自己命名的用户名 useradd username 2 设置密码 passwd username 3 用户文件夹在 home 下 4 查看更改登录管理账号 sudo vi etc ssh sshd config 5
  • rosdep init报错解决方法

    rosdep init报错解决方法 很多小伙伴在安装ROS的过程中都不可避免的要执行rosdep init和rosdep update这两行命令行 xff0c 这也是在安装ROS的过程中最让人头疼的两步 xff0c 一般都没法一次成功 xf
  • win10登录出现“其他用户”,一分钟后自动重启的解决方案和原因分析

    今天公司的同事的电脑莫名其妙重启开机后 xff0c 就一直是其他用户 身为技术部的人 xff0c 程序员就该修电脑是常识 xff08 大雾 xff09 百度各种解决方案的汇总 输入你的微软账号用户名 xff08 邮箱 xff09 和微软账号
  • Nginx启动失败control process exited, code=exited status=1

    出现现象 nginx启动失败 xff0c 估计是端口被某个进程占用了 通过lsof i 80 查看 xff0c 发现被httpd服务占用 可以通过杀掉进程或者更改nginx 端口解决 xff0c 通cat etc nginx nginx c
  • Python爬虫入门实例一之淘宝商品页面的爬取

    文章目录 1 爬取原界面2 代码解析3 完整代码引用源自 1 爬取原界面 今天给大家介绍第一个爬虫小例子 xff0c 使用requests库爬取淘宝商品信息 xff0c 首先想要爬取的内容如下图 2 代码解析 使用交互环境给大家带来代码解析
  • Linux(Ubuntu)入门——1.Ubuntu虚拟机安装

    inux Ubuntu 入门 1 Ubuntu虚拟机安装 目录 Ubuntu虚拟机安装 Ubuntu虚拟机安装 1 在VMware界面选择创建新的虚拟机 2 选择自定义 xff08 高级 xff09 xff0c 然后点击下一步 3 硬件兼容
  • Linux(Ubuntu)入门——4.VMwaretools安装(解决虚拟机窗口过小)

    Linux Ubuntu 入门 4 VMwaretools安装 xff08 解决虚拟机窗口过小 xff09 1 虚拟机选项卡里选择安装VMwareTools 2 桌面会看到VMware Tools的图标 xff0c 双击打开 3 将以 ta
  • Java0608-node

    Java0608 node 目录 Java0608 node1 数组1 1概念1 2 数组的使用1 3使用场景1 4应用 2 二维数组2 1二维数组的创建 1 数组 1 1概念 数组是指内存中一块连续的空间 xff0c 数量固定且存储类型相
  • Linux修改密码报错Authentication token manipulation error的终极解决方法

    文章目录 报错说明解决思路流程排查特殊权限有没有上锁查看根目录和关闭selinux etc pam d passwd文件 etc pam d system auth文件终极办法 xff0c 手动定义密码passwd Have exhaust
  • java0614-homework

    java0614 homework 目录 java0614 homework1 定义狗类2 求矩形面积3 实现级联菜单4 模拟计算器5 用户登录 1 定义狗类 题目 定义狗类 属性 xff1a 昵称 xff0c 品种 xff0c 健康值 x
  • Java0621-node

    Java0621 node 目录 1 JDK常用的类1 1 学习标准1 2 学习方法1 3 String1 3 1 定义1 3 2 构造方法1 3 3 方法1 3 3 1 字符串属性相关1 3 3 2 字符串比较1 3 3 3 索引1 3
  • 关于我使用的安卓View Binding方式

    方案有 xff1a ButterKnife findViewById View Binding 下面看下View Binding在下面的场景怎么使用 Activities Fragments Inflate Bind RecyclerVie