当前位置: 首页 > news >正文

(笔记)Kotlin——Android封装ViewBinding之二 优化

 0. 在app模块的build.gradle文件中添加如下配置开启ViewBinding 


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

1. 新建一个Ext.kt文件 

添加两个扩展函数,分别对应Activity和Fragment

inline fun <T : ViewBinding> AppCompatActivity.viewBinding(crossinline bindingInflater: (LayoutInflater) -> T) =lazy(LazyThreadSafetyMode.NONE) {bindingInflater.invoke(layoutInflater)}inline fun <T : ViewBinding> Fragment.viewBinding(crossinline bindingInflater: (LayoutInflater, ViewGroup? , Boolean) -> T) =lazy(LazyThreadSafetyMode.NONE) {bindingInflater.invoke(layoutInflater, view?.parent as? ViewGroup, false)}

2. Activity中使用

BaseActivity

public abstract class BaseActivity<VB : ViewBinding>(inflater: (LayoutInflater) -> VB) :AppCompatActivity() {protected val binding by viewBinding(inflater)override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(binding.root)initView()initData()}protected fun initView() {}protected fun initData() {}}

继承自BaseActivity的子类 

class VideoPlayerActivity : BaseActivity<ActivityVideoPlayerBinding>(ActivityVideoPlayerBinding::inflate),View.OnClickListener {override fun initView() {binding.play.setOnClickListener(this)}override fun onClick(p0: View?) {}}

3. Fragment中使用

abstract class BaseFragment<VB : ViewBinding>(inflater: (LayoutInflater, ViewGroup?, Boolean) -> VB): Fragment() {protected val binding by viewBinding(inflater)override fun onCreateView(inflater: LayoutInflater,container: ViewGroup?,savedInstanceState: Bundle?): View? {initView(binding.root, savedInstanceState)return binding.root}abstract fun initView(root: View, savedInstanceState: Bundle?)}

继承自BaseFragment的子类

class TestFragment : BaseFragment<FragmentTestBinding>(FragmentTestBinding::inflate) {override fun initView(root: View, savedInstanceState: Bundle?) {}}

相关文章:

(笔记)Kotlin——Android封装ViewBinding之二 优化

0. 在app模块的build.gradle文件中添加如下配置开启ViewBinding android {.......viewBinding {enabled true}} 1. 新建一个Ext.kt文件 添加两个扩展函数&#xff0c;分别对应Activity和Fragment inline fun <T : ViewBinding> AppCompatActivity.viewBinding(cross…...

MATLAB算法实战应用案例精讲-【图像处理】机器视觉(基础篇)(八)

目录 前言 几个高频面试题目 机器视觉如何获取到好图像 常见的视觉光源 各种视觉打光方式...

由k8s升级慢引起的etcd性能不足的问题排查

一、基本介绍 最近etcd查看出现性能 curl --cacert /path/to/etcdctl-ca.crt --cert /path/to/etcdctl.crt --key /path/to/etcdctl.key https://:2379/metrics | grep etcd_disk_wal_fsync_duration_seconds_bucket 当集群规模突破过大时规模时,曾出现如下性能瓶颈问题: etc…...

如何构建用于Skydel GNSS模拟仿真的SNMP代理方式?

使用Skydel API构建测试方案 凭借其现代、强大且直观的API&#xff0c;德思特Safran GNSS模拟引擎Skydel免费提供了Python、C#、C和Labview的开源客户端库&#xff0c;它具有600多条命令&#xff0c;并且有完善的文档与记录。 随着Skydel软件更新添加新功能&#xff0c;API得…...

vue2+ant-design-vue a-form-model组件二次封装(form表单组件)FormModel 表单

一、效果图 二、参数配置 1、代码示例 <t-antd-form:ref-obj.sync"formOpts.ref":formOpts"formOpts":widthSize"1":labelCol"{ span:2}":wrapperCol"{ span:22}"handleEvent"handleEvent" />2. 配置参数…...

对比解析php和go对JSON处理的区别

一、go 转化php数组代码 php程序 $str <<<EOF {"操作源":"任意","数据库":"任意","语句类型":"CREATE DATABASE&#xff1b;DROP DATABASE&#xff1b;ALTER DATABASE","影响行数":"不…...

HTTP和HTTPS本质区别——SSL证书

HTTP和HTTPS是两种广泛使用的协议&#xff0c;尽管它们看起来很相似&#xff0c;但是它们在网站数据传输的安全性上有着本质上的区别。 HTTP是明文传输协议&#xff0c;意味着通过HTTP发送的数据是未经加密的&#xff0c;容易受到拦截、窃听和篡改的风险。而HTTPS通过使用SSL或…...

JS 防抖和节流

防抖&#xff08;debounce&#xff09;和节流&#xff08;throttle&#xff09;是JavaScript中常用的性能优化技术&#xff0c;用于限制某些高频率触发的函数执行次数&#xff0c;减少不必要的计算和网络请求。下面分别介绍防抖和节流的实现方式。 防抖&#xff08;Debounce&am…...

Django开发实例总结(入门级、4.2.6、详细)

目录 概述 Django的核心组件包括 Django的项目结构 创建工程&#xff08;4.2.6&#xff09; 实例一&#xff1a;Hello world 实例二&#xff1a;访问一个自定义主页 实例三&#xff1a;通过登录跳转到主页 实例四&#xff1a;主页添加静态文件&#xff0c;包含js、css、…...

Variations-of-SFANet-for-Crowd-Counting可视化代码

前文对Variations-of-SFANet-for-Crowd-Counting做了一点基础梳理&#xff0c;链接如下&#xff1a;Variations-of-SFANet-for-Crowd-Counting记录-CSDN博客 本次对其中两个可视化代码进行梳理 1.Visualization_ShanghaiTech.ipynb 不太习惯用jupyter notebook, 这里改成了p…...

所有的人机交互都存在不匹配现象

从接受理论的角度来看&#xff0c;就像夫妻一样&#xff0c;所有的人机交互都存在不匹配的现象。 接受理论是一个解释人们如何学习和接受信息的心理模型。该理论认为&#xff0c;当人们学习新信息时&#xff0c;他们会将其与自己已有的知识和经验联系起来&#xff0c;以便更好地…...

LED数码管的静态显示与动态显示(Keil+Proteus)

前言 就是今天看了一下书上的单片机实验&#xff0c;发现很多的器件在Proteus中都不知道怎么去查找&#xff0c;然后想做一下这个实验&#xff0c;尝试能不能实现&#xff0c;LED数码管的两个还可以实现&#xff0c;但是用LED点阵显示器的时候他那个网络标号不知道是什么情况&…...

webGL编程指南 第五章 TexturedQuad_Clamp_Mirror

我会持续更新关于wegl的编程指南中的代码。 当前的代码不会使用书中的缩写&#xff0c;每一步都是会展开写。希望能给后来学习的一些帮助 git代码地址 &#xff1a;空 上一章节中我们学习了如何使用varyting变量绘制图片&#xff0c;本章节&#xff0c;我们学习texParameter…...

【Azure】存储服务:Azure 的存储账户

文章目录 一、前提知识&#xff08;建议了解&#xff09;二、介绍 Azure 存储帐户三、使用 Microsoft Azure 门户创建存储帐户 一、前提知识&#xff08;建议了解&#xff09; 在每一个云厂商中&#xff0c;都有自身的云存储&#xff0c;也有根据不同功能进行区分的不同类型的…...

高等数学啃书汇总重难点(十一)曲线积分与曲面积分

依旧是公式极其复杂恶心的一章&#xff0c;建议是&#xff1a;掌握两种线面积分的计算套路即可&#xff0c;和第8章一样属于同济版教材中最不重要的章节&#xff0c;不会对底层理解做过多考察~ 1.弧长曲线积分的几何意义 2.弧长曲线积分的定义和性质 3.弧长曲线积分的计算方式 …...

【算法专题】双指针—盛最多水的容器

一、题目解析 分析这个题目不难得出一个容积公式 二、算法原理 解法一&#xff1a;暴力枚举&#xff08;超时&#xff09; 套用上述的容积公式&#xff0c;使用两个for循环来枚举出所有可能的情况&#xff0c;再挑出最大值即可&#xff0c;但是这种写法会超时&#xff0c;导致…...

java入门,程序=数据结构+算法

一、前言 在学习java的时候&#xff0c;我印象最深的一句话是&#xff1a;程序数据结构算法&#xff0c;对于写java程序来说&#xff0c;这就是java的入门。 二、java基本数据结构与算法 1、数据类型 java中的数据类型8种基本数据类型&#xff1a; 整型 byte 、short 、int…...

9.MySQL索引的操作

个人主页&#xff1a;Lei宝啊 愿所有美好如期而遇 目录 索引操作 查询索引 创建主键索引 唯一索引的创建 普通索引的创建 全文索引的创建 删除索引 索引创建原则 索引操作 查询索引 第一种方法&#xff1a; show keys from 表名\G 我们了解其中几个就好。 第二种方法…...

大型加油站3d全景虚拟现实展示平台实现全方位立体呈现

近年来&#xff0c;随着国民经济的快速发展&#xff0c;交通基础设施的不断改善&#xff0c;机动车保有量的持续飙升&#xff0c;以至于加油站的建设数量和密度也在不断扩张。加油站作为人流量大且常见的城市场景&#xff0c;对加油站进行安全防范措施具有非常重要的安全意义。…...

Reading:Deep dive into the OnPush change detection strategy in Angular

原文连接&#xff1a;IndepthApp 今天深入阅读并总结Angualr中onPush更新策略。 1. 两种策略 & whats Lview&#xff1f; Angular 实现了两种策略来控制各个组件级别的更改检测行为。这些策略定义为Default和OnPush&#xff1a; 被定义为枚举&#xff1a; export enum…...

AI Native 公司构建指南:从 Anthropic 创始人手册到工程实践

【摘要】系统解析 AI Native 公司的本质特征与技术架构&#xff0c;基于 Anthropic 2026 年《创始人行动手册》核心框架&#xff0c;结合 31 家精益 AI 团队的真实案例&#xff0c;提供从想法验证到规模化增长的完整工程落地路径&#xff0c;帮助技术创业者避开 AI 时代特有的创…...

3D光学流技术在机器人动作生成中的应用与优化

1. 3D光学流技术解析与机器人动作生成3D光学流技术是计算机视觉领域的重要突破&#xff0c;它通过分析物体在三维空间中的连续运动轨迹&#xff0c;为机器人动作规划提供了前所未有的精确度。传统2D光学流仅能捕捉平面运动信息&#xff0c;而3D光学流则能完整重建物体在XYZ三个…...

2026保姆级教程:免费一键去图片水印的App有哪些?这几种方法一看就会

你是不是也遇到过这种抓狂的时刻&#xff1f;好不容易在网上找到一张绝美壁纸或实用素材&#xff0c;保存下来一看&#xff0c;角落那个水印直接毁掉了整张图的氛围。更气人的是&#xff0c;你尝试用相册自带的编辑功能去涂抹&#xff0c;结果越涂越糊&#xff0c;最后只能无奈…...

CentOS 7服务器上,从禁用Nouveau到成功点亮NVIDIA显卡的保姆级实录

CentOS 7服务器NVIDIA显卡驱动部署全指南&#xff1a;从Nouveau禁用到CUDA环境搭建当你第一次在CentOS 7服务器上部署NVIDIA显卡驱动时&#xff0c;那个看似简单的"禁用Nouveau"步骤往往会成为整个安装过程中最大的绊脚石。作为一位经历过无数次驱动安装的老手&#…...

Android App原生指令通道doCommandNative深度解析与Frida Hook实战

1. 这不是“逆向教程”&#xff0c;而是一次真实App通信链路的解剖现场你有没有遇到过这样的情况&#xff1a;在某A系头部电商App里&#xff0c;点击一个商品卡片&#xff0c;页面秒开&#xff1b;但用常规WebView调试或抓包工具去观察&#xff0c;却看不到任何明显的HTTP请求发…...

基于LIME可解释性AI的宇宙学模型分类:从fσ8数据到物理洞察

1. 项目概述与核心价值在宇宙学这个探索宇宙终极奥秘的领域&#xff0c;我们常常面临一个核心挑战&#xff1a;如何从海量、复杂且充满噪声的观测数据中&#xff0c;提取出能够区分不同物理理论的“指纹”。大尺度结构&#xff08;LSS&#xff09;的观测&#xff0c;特别是星系…...

第41天:MySQL新特性

Python学习100天(从入门到精通系列文章) 文章目录 Python学习100天(从入门到精通系列文章) 前言 一、JSON类型 1.1 JSON类型的基本形式 1.2 JSON类型的实际应用场景 1.3 用户画像场景中的JSON应用 二、窗口函数 2.1 窗口函数的概念 2.2 窗口函数实战示例 总结 前言 在掌握…...

保姆级教程:在Ubuntu 20.04上搞定浙大lidar_IMU_calib(从编译到避坑)

保姆级教程&#xff1a;在Ubuntu 20.04上搞定浙大lidar_IMU_calib&#xff08;从编译到避坑&#xff09;当激光雷达&#xff08;LiDAR&#xff09;和惯性测量单元&#xff08;IMU&#xff09;需要协同工作时&#xff0c;标定这两个传感器之间的外参是必不可少的步骤。浙大开源项…...

智能化浪潮下,出海云端基建重塑企业全球化发展格局

AI技术全面渗透全球化商业场景&#xff0c;出海云端基建成为企业突破海外运营壁垒、实现智能化落地的核心载体。本文结合行业实操经验&#xff0c;拆解出海基建的发展趋势、现存问题与落地路径。 一、行业复盘&#xff1a;企业出海基建的迭代困境 深耕企业全球化服务领域多年…...

N_m3u8DL-RE深度解析:现代流媒体下载引擎的架构设计与实战应用

N_m3u8DL-RE深度解析&#xff1a;现代流媒体下载引擎的架构设计与实战应用 【免费下载链接】N_m3u8DL-RE Cross-Platform, modern and powerful stream downloader for MPD/M3U8/ISM. English/简体中文/繁體中文. 项目地址: https://gitcode.com/GitHub_Trending/nm3/N_m3u8…...