Android Kotlin Viewbinding封装
目录
Viewbinding配置
Activity封装
Activity使用
Fragment封装
Fragment使用
Dialog封装
Dialog使用
Viewbinding配置
android { viewBinding { enabled = true }
}
Activity封装
import android.os.Bundle
import android.view.LayoutInflater
import androidx.appcompat.app.AppCompatActivity
import androidx.viewbinding.ViewBinding/*** @explain* @author Created by PGC on 2023/12/11 9:56.*/
abstract class BaseBindingActivity<VB : ViewBinding>(private val inflate: (LayoutInflater) -> VB) : AppCompatActivity() {lateinit var binding: VBoverride fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)binding = inflate(layoutInflater)setContentView(binding.root)}}
Activity使用
class ExampleActivity : BaseBindingActivity<ActivityExampleBinding>(ActivityExampleBinding::inflate) {@SuppressLint("SetTextI18n")override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)binding.exampleBindingBt.text = "binding"}
}
Fragment封装
abstract class BaseBindingFragment<VB : ViewBinding>(private val inflater: (LayoutInflater, ViewGroup?, Boolean) -> VB) :Fragment() {private var _binding: VB? = nullval binding: VB get() = _binding!!override fun onCreateView(inflater: LayoutInflater,container: ViewGroup?,savedInstanceState: Bundle?): View? {_binding = inflater(inflater, container, false)return binding.root}override fun onDestroyView() {super.onDestroyView()_binding = null}}
Fragment使用
class ExampleFragment : BaseBindingFragment<FragmentExampleBinding>(FragmentExampleBinding::inflate) {@SuppressLint("SetTextI18n")override fun onViewCreated(view: View, savedInstanceState: Bundle?) {super.onViewCreated(view, savedInstanceState)binding.exampleBindingTv.text="binding"}
}
Dialog封装
abstract class BaseBindingDialog<VB : ViewBinding>(context: Context,themeResId: Int,private val inflate: (LayoutInflater) -> VB) : Dialog(context, themeResId) {lateinit var binding: VBconstructor(context: Context, inflate: (LayoutInflater) -> VB) : this(context, 0, inflate)override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)binding = inflate(layoutInflater)setContentView(binding.root)}
}
Dialog使用
class ExampleDialog(context: Context): BaseBindingDialog<DialogExampleBinding>(context,0,DialogExampleBinding::inflate) {override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)binding.tv.text = "binding"}
}
相关文章:
Android Kotlin Viewbinding封装
目录 Viewbinding配置 Activity封装 Activity使用 Fragment封装 Fragment使用 Dialog封装 Dialog使用 Viewbinding配置 android { viewBinding { enabled true } } Activity封装 import android.os.Bundle import android.view.LayoutInflater import androidx.ap…...
Flutter:web项目跨域问题解决
前后端解决系列 文章目录 一、Flutter web客户端解决本地环境调试跨域问题二、Flutter web客户端解决线上环境跨域问题 一、Flutter web客户端解决本地环境调试跨域问题 就一句命令【--web-browser-flag "--disable-web-security"】,用来屏蔽浏览器域名请…...
汽车标定技术(十二)--A2L文件生成的方法
目录 1.工具生成 1.1 CANape/ASAP2 Studio 1.2 ASAP2ToolKit 1.3 Matlab/Simulink 2.手写A2L要点 3.小结 A2L文件的制作一直以来是一个很少有人关注的方向,不管是标定工程师还是Slave协议栈的开...
《PySpark大数据分析实战》-03.了解Hive
📋 博主简介 💖 作者简介:大家好,我是wux_labs。😜 热衷于各种主流技术,热爱数据科学、机器学习、云计算、人工智能。 通过了TiDB数据库专员(PCTA)、TiDB数据库专家(PCTP…...
经验分享|MySQL分区实战(RANGE)
概述 分区概述 在 MySQL 中, InnoDB存储引擎长期以来一直支持表空间的概念。在 MySQL 8.0 中,同一个分区表的所有分区必须使用相同的存储引擎。但是,也可以为同一 MySQL 服务器甚至同一数据库中的不同分区表使用不同的存储引擎。 通俗地讲…...
Arrays.asList() 和 Collections.singletonList()
Arrays.asList() 和 Collections.singletonList() 概述 List 是我们使用Java时常用的集合类型。众所周知,我们可以轻松地在一行中初始化列表。例如,当我们想要初始化一个只有一个元素的List时,我们可以使用Arrays.asList(&#…...
Firmware Analysis Plus (Fap)固件模拟安装教程(最新)
最近在搞IoT的研究,但是难在设备比较难弄,只有固件,而没有设备,买吧,又太费钱,不划算。好在有很多项目可以在模拟环境中运行固件。但是几乎没有一个平台能够模拟所有硬件设备。IoT产品的架构也不尽相同。 …...
使用包、Crate 和模块管理项目(上)
目录 1、包和Crate 2、定义模块来控制作用域与私有性 2.1 在模块中对相关代码进行分组 3、引用模块项目的路径 3.1 使用 pub 关键字暴露路径 二进制和库 crate 包的最佳实践 3.2 super 开始的相对路径 3.3 创建公有的结构体和枚举 Rust 有许多功能可以让你管理代码的组…...
【Kotlin】
Lambda 就是一小段可以作为参数传递的代码。 因为正常情况下,我们向某个函数传参时只能传入变量,而借助Lambda 却允许传入一小段代码。 Lambda 表达式的语法结构: {参数名1: 参数类型, 参数名2: 参数类型 -> 函数体}首先,最外…...
JavaDay17
创建不可变集合 import java.util.Iterator; import java.util.List;public class Test {public static void main(String[] args) {/*创建不可变的List集合* "张三" "李四" "王五" "赵六*///一旦创建之后 是无法进行修改的 在下面的代码…...
Python爬取酷我音乐
🎈 博主:一只程序猿子 🎈 博客主页:一只程序猿子 博客主页 🎈 个人介绍:爱好(bushi)编程! 🎈 创作不易:喜欢的话麻烦您点个👍和⭐! 🎈…...
项目实战第四十七讲:易宝支付对接详解(保姆级教程)
易宝支付对接(保姆级教程) 为了实现项目的支付需求,公司选择了易宝支付进行对接,本文是项目实战第四十七讲,详解易宝支付对接。 文章目录 易宝支付对接(保姆级教程)1、需求背景2、流程图3、技术方案4、相关接口4.1、入驻相关(商户入网)4.2、账户相关接口(充值、提现、…...
python的websocket方法教程
WebSocket是一种网络通信协议,它在单个TCP连接上提供全双工的通信信道。在本篇文章中,我们将探讨如何在Python中使用WebSocket实现实时通信。 websockets是Python中最常用的网络库之一,也是websocket协议的Python实现。它不仅作为基础组件在…...
Qt处理焦点事件(获得焦点,失去焦点)
背景: 我只是想处理焦点动作,由于懒,上网一搜,排名靠前的一位朋友,使用重写部件的方式实现。还是因为懒,所以感觉复杂了。于是又花了一分钟解决了一下。 所以记录下来,以免以后忘了。 思路&a…...
SiteGround如何设置WordPress网站自动更新
SiteGround Autoupdate功能会自动帮我们更新在他们这里托管的所有WordPress网站,这样做是为了保证网站安全,并且让它们一直保持最新状态。他们会根据我们选择的设置自动更新不同版本的WordPress,包括主要版本和次要版本。在每次自动更新之前&…...
http代理和SOCK5代理谁更安全?
在这个网络化的时代,我们常常听到HTTP代理和SOCKS5代理这两个名词,不过很多人并不了解是什么意思。今天,我们将揭开这两种代理的神秘面纱,看看到底HTTP代理和SOCKS5代理哪个更安全? HTTP代理:高效通信的“枢…...
Kotlin关键字二——constructor和init
在关键字一——var和val中最后提到了构造函数,这里就学习下构造函数相关的关键字: constructor和init。 主要构造(primary constructor) kotlin和java一样,在定义类时就自动生成了无参构造 // 会生成默认的无参构造函数 class Person{ }与java不同的是…...
java的long类型超过9位报错:the literal 987654321000 of type int is out of range
java的long类型超过9位报错 1、报错提示2、报错截图3、解决办法4、参考文章 1、报错提示 the literal 987654321000 of type int is out of range 2、报错截图 3、解决办法 long类型是一种用于表示较大整数的数据类型,范围比int类型更广泛。然而,即使…...
【Java期末复习资料】(4)模拟卷
有不会的题可以后台问我的哦,看见了就会回。 本文章主要是模拟卷,知识点例题简答题已经发过了,可以在主页专栏Java中找一下 一、单项选择题 1. 编译 Java Application 源程序文件将产生相应的字节码文件,这些字节码文件的扩展名为…...
【计算机网络】UDP报文详解
目录 一. UDP协议概述 二. UDP报文格式 首部 三. UDP的缓冲区 一. UDP协议概述 UDP——用户数据报协议,是传输层的一个重要协议 基于UDP的应用层协议有:DNS,TFTP,SNMP,NTP 协议全称默认端口号DNSDomain Name Se…...
WeChatExporter:免费开源工具,三步轻松备份你的微信聊天记录到电脑
WeChatExporter:免费开源工具,三步轻松备份你的微信聊天记录到电脑 【免费下载链接】WeChatExporter 一个可以快速导出、查看你的微信聊天记录的工具 项目地址: https://gitcode.com/gh_mirrors/wec/WeChatExporter 你是否担心过手机丢失、系统崩…...
Jetson Nano/Orin上离线语音识别的实战踩坑:从Whisper到Sherpa-onnx,我最终选了它
Jetson Nano/Orin离线语音识别实战:从Whisper到Sherpa-onnx的技术选型与避坑指南 在边缘计算设备上实现高质量的离线语音识别(ASR)一直是开发者面临的挑战。Jetson系列作为NVIDIA推出的边缘AI计算平台,凭借其强大的GPU加速能力和低…...
AI赋能tokenp:借助快马多模型能力生成具备智能风控与建议的钱包原型
最近在尝试用AI辅助开发一个智能化的tokenp钱包原型,发现InsCode(快马)平台的多模型AI能力特别适合快速实现这类需求。今天就来分享下如何用React构建一个带AI风控和建议功能的增强型钱包界面。 项目整体构思 传统钱包应用主要关注资产存储和转账,而结合…...
为什么要做 GeoPipeAgent
如果有多个供应商,你也可以使用 [[CC-Switch]] 来可视化管理这些API key,以及claude code 的skills。 # 多平台安装指令 curl -fsSL https://claude.ai/install.sh | bash ## Claude Code 配置 GLM Coding Plan curl -O "https://cdn.bigmodel.cn/i…...
linux下的spi子系统
概念通信模式可以分为单工、半双工和全双工,单工通信指信号只在一个方向上传输,仅 能发送或接收,而半双工通信指信号可以在俩个方向上传输,但某一个时刻只允许发送或接收,而全双工通信指数据同时在俩个方向上传输&…...
3步零代码实现Python应用无缝迁移:Python for Android跨平台转换指南
3步零代码实现Python应用无缝迁移:Python for Android跨平台转换指南 【免费下载链接】python-for-android Turn your Python application into an Android APK 项目地址: https://gitcode.com/gh_mirrors/py/python-for-android 问题诊断篇:Pyth…...
救命!2026爆款PPT一键制作工具实测,新手也能5分钟出片,告别熬夜手搓无标题
作为常年和PPT打交道的AI博主,每天都能收到粉丝私信轰炸:“做PPT有没有捷径?”“AI能不能帮我快速出稿?”“新手零基础,半天排不出一页像样的版面”……懂的都懂!谁没为了一份PPT熬到凌晨?找模板…...
javase的第一次博客
1,计算机简介:用于数据计算和处理2,计算机的硬件和软件:计算机硬件:运算器,控制器,存储器,输入设备,输出设备(冯 诺依曼模型)CPU:运算…...
怎么样辨别生活中遇到的那些理财平台的真假?
怎么样辨别生活中遇到的那些理财平台的真假?凡是声称高息保本的投资理财平台极有可能是黑平台。尝试用手机官方应用商城搜索理财软件,如果是别人通过聊天软件发链接给你安装的,不是正规手机应用商城下载的,且在应用商城无法搜索到…...
告别Transformer高开销:用频域注意力(FMNet思路)为你的轻量化模型注入全局感知能力
频域注意力革命:如何在轻量化模型中实现全局感知而不牺牲效率 引言:轻量化模型的困境与突破 在移动端AI和边缘计算领域,模型轻量化一直是个永恒的话题。开发者们不断在模型精度和计算资源之间寻找平衡点,而传统CNN模型虽然计算效…...
