个人开源库的一些更新,兼谈Jetpack和Kotlin给Android开发带来的变化

前段时间,我开发完成了新的软件 移动工具箱。最近,我准备把开发过程中总结的一些东西沉淀到自己个人开源的几个库中。最新的一些更新中运用了 Kotlin 和 Jetpack 的一些语法特性,故此总结一下。Jetpack 和 Kotlin 出来已经很久了,然而很多应用开发还停留在 MVP 以及 Java 阶段,即便使用了 Kotlin,很多人只不过是像使用 Java 一样在使用 Kotlin. 实际上,如果能够结合 Kotlin 和 Jetpack 的语法特性,可以大大提升我们日常开发的效率。下面,我以个人开源库的一些新的 Feature 的更新来说明,Jetpack 带来的新变化以及 Kotlin 的特性的运用。

1、Android-VMLib

这个库的地址是:https://github.com/Shouheng88/Android-VMLib

1.1 新的数据交互设计:隐藏 LiveData

其实早在之前的文章中我也提及过这个库 《2020 年,我这样在项目中使用 MVVM》。不过,在新的版本中我又做了一些改动。首先是将应用依赖的一些三方库提升到了最新版本。其次是,在 BaseActivity 和 BaseFragment 中,我又增加了几个方法,

// 新增观察方法,ui 层通过指定 class, flag 和 single 直接对数据进行监听
protected fun <T> observe(dataType: Class<T>,
                          flag: Int? = null,
                          single: Boolean = false,
                          success: (res: Resources<T>) -> Unit = {
   },
                          fail: (res: Resources<T>) -> Unit = {
   },
                          loading: (res: Resources<T>) -> Unit = {
   }) {
   
    vm.getObservable(dataType, flag, single).observe(this, Observer {
    res ->
        when (res?.status) {
   
            Status.SUCCESS -> success(res)
            Status.LOADING -> loading(res)
            Status.FAILED -> fail(res)
        }
    })
}

其实之前的文章中,我也提到过这个问题。我们通过自定义的枚举将 ui 层和 ViewModel 的交互划分为 “成功”、“失败” 和 “加载中” 三种状态,然后在 ui 层根据状态做判断来分别处理各种状态。那么,既然这样,我们为什么不将每个状态写成一个方法分别进行回调呢?当然,这里我们使用 Kotlin 的函数式编程更好地实现了这个目标。并且,我们为每个函数指定了一个默认的为空的实现,这样用户只需要根据自己的需要实现指定的状态即可。

另外,在 ViewModel 中我增加了下面几个方法,

// 顶层 viewmodel 新增方法,包装了三种状态的交互
fun <T> setSuccess(dataType: Class<T>, flag: Int? = null, single: Boolean = false, data: T) {
   
    getObservable(dataType, flag, single).value = Resources.success(data)
}

fun <T> setLoading(dataType: Class<T>, flag: Int? = null, single: Boolean = false) 
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值