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

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

Groovy 复制代码
android {
    .......

    viewBinding {
        enabled = true
    }

}

1. 新建一个Ext.kt文件

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

Kotlin 复制代码
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

Kotlin 复制代码
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的子类

Kotlin 复制代码
class VideoPlayerActivity : BaseActivity<ActivityVideoPlayerBinding>(ActivityVideoPlayerBinding::inflate),
    View.OnClickListener {

    override fun initView() {
        binding.play.setOnClickListener(this)
    }

    override fun onClick(p0: View?) {

    }

}

3. Fragment中使用

Kotlin 复制代码
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的子类

Kotlin 复制代码
class TestFragment : BaseFragment<FragmentTestBinding>(FragmentTestBinding::inflate) {

    override fun initView(root: View, savedInstanceState: Bundle?) {
    }

}
相关推荐
flower_drop6 小时前
基于 WebUSB 与 CDP:在浏览器端实现 Android 设备通信与无证书抓包实践
android·chrome·测试工具·adb·bug·edge浏览器
撩得Android一次心动8 小时前
Jetpack Compose 知识点整理1【个人用】
android·学习·kotlin·android jetpack·compose
ForteScarlet9 小时前
Kotlin 2.4.20 现已发布,新特性多不多?
android·java·开发语言·开源·kotlin·jetbrains
JMchen12310 小时前
Cursor高阶玩法:.cursorrules编写与Spec-Driven开发实战,把AI调教成专属结对编程搭档
人工智能·vscode·kotlin·cursor·结对编程·spec-driven·.cursorrules
方白羽11 小时前
Android Studio 自动国际化插件:SmartI18n
android·android studio·intellij idea
码农coding14 小时前
android12 状态栏图标的加载流程
android
hai_android14 小时前
Kotlin 协程作用域源码剖析
android·kotlin
Yeyu15 小时前
Android 画中画(PiP)小窗播放:怎么做、以及它到底是怎么工作的
android
千里马学框架15 小时前
安卓系统性能优化高级实战开发专题--开机,app冷启动优化
android·智能手机·性能优化·framework·性能·开机优化·app冷启动优化
律宏阔15 小时前
Android 手机通过 adblib 使用 ADB Wi-Fi 控制 Android 9 开发板
android