使用kotlin委托实现ViewBinding懒加载

简介: 使用kotlin委托实现ViewBinding懒加载

继承 Lazy 方式


实现代码

fun <T : ViewBinding> AppCompatActivity.binding(inflate: (LayoutInflater) -> T): Lazy<T> {
    return MainLazy(this, inflate)
}
class MainLazy<T : ViewBinding>(
    val activity: AppCompatActivity,
    val inflate: (LayoutInflater) -> T
) : Lazy<T> {
    var cache: T? = null
    override val value: T
        get() {
            if (cache == null) {
                cache = inflate(activity.layoutInflater)
            }
            return cache!!
        }
    override fun isInitialized(): Boolean = cache != null
}
复制代码


使用方式

val binding: ActivityMainBinding by binding(ActivityMainBinding::inflate)
复制代码


lazy 关键字方式


实现代码

fun <T : ViewBinding> AppCompatActivity.bindingByLazy(inflate: (LayoutInflater) -> T)= lazy {
     inflate(layoutInflater).apply {
    }
}
复制代码


使用方式

val binding: ActivityMainBinding by bindingByLazy(ActivityMainBinding::inflate)
复制代码

git:github.com/ymeddmn/Vie…



相关文章
|
Kotlin
Kotlin | 实现数据类(data)深拷贝
在Kotlin中,data数据类默认的copy方法实现的是浅拷贝,但我们有时候需要实现深拷贝。 在kotlin中,实现就比较容易了。
755 0
Kotlin | 实现数据类(data)深拷贝
|
6月前
|
设计模式 Java Kotlin
Kotlin中的委托、属性委托和延迟加载
Kotlin中的委托、属性委托和延迟加载
|
存储 XML 设计模式
Kotlin 基础 | 委托及其应用
Kotlin 基础 | 委托及其应用
87 0
|
设计模式 编译器 Android开发
Android基础--kotlin(十二)kotlin 委托
kotlin 委托 委托模式是软件设计模式中的一项基本技巧。在委托模式中,有两个对象参与处理同一个请求,接受请求的对象将请求委托给另一个对象来处理。
|
JSON 安全 Java
Kotlin学历之委托属性
Kotlin学历之委托属性
126 0
Kotlin学历之委托属性
|
Java Kotlin
Kotlin学历之扩展与委托
Kotlin学历之扩展与委托
119 0
Kotlin学历之扩展与委托
|
设计模式 Kotlin
Kotlin设计模式实现之装饰者模式(Decorator)
装饰者模式(Decorator):在不改变对象自身的基础上,动态地给一个对象添加一些额外的职责。与继承相比,装饰者是一种更轻便灵活的做法。若要扩展功能,装饰者提供了比继承更有弹性的替代方法。
192 0
Kotlin设计模式实现之装饰者模式(Decorator)
|
设计模式 算法 Kotlin
Kotlin设计模式实现之策略模式
Kotlin设计模式实现之策略模式
187 0
Kotlin设计模式实现之策略模式
|
存储 Kotlin
数据结构 | 二分搜索树及它的各种操作(kotlin实现)
在开始之前,应该先讲一下什么是二叉树。
121 0
数据结构 | 二分搜索树及它的各种操作(kotlin实现)
|
存储 C语言 Kotlin
重学数据结构-使用Kotlin实现链表及其他扩展
很简单,链表不像数组那样,不需要我们主动扩容,我们只需要类似递归一样,一层套一层即可,即node1持有node2的引用,node2持有node3…,相应的每次插入我们只需要更改头结点即可,当node-x持有的下一个node引用为null时,我们也可以判定,此时为链表尾节点。
268 0