2020 年,我这样在项目中使用 MVVM,Android进阶学习资料

}


这里为了通知 View 层数据的加载状态定义了一个 Boolean 类型的 LiveData 进行交互。这样你需要多维护一个变量,显得代码不够简洁。实际上,通过对数据交互格式的规范,我们可以更优雅地完成这个任务。

在 Android-VMLib 当中,我们通过自定义枚举来表示数据的状态,

public enum Status {
// 成功
SUCCESS(0),
// 失败
FAILED(1),
// 加载中
LOADING(2);

public final int id;

Status(int id) {
    this.id = id;
}

}


然后,将错误信息、数据结果、数据状态以及预留字段包装成一个 Resource 对象,来作为固定的数据交互格式,

public final class Resources {
// 状态
public final Status status;
// 数据
public final T data;
// 状态,成功或者错误的 code 以及 message
public final String code;
public final String message;
// 预留字段
public final Long udf1;
public final Double udf2;
public final Boolean udf3;
public final String udf4;
public final Object udf5;

// ...

}


解释下这里的预留字段的作用:它们主要用来作为数据补充说明。比如进行分页的时候,如果 View 层不仅想获取真实的数据,还想得到当前的页码,那么你可以将页码信息塞到 udf1 字段上面。以上,我对各种不同类型的基础数据类型只提供了一个通用的选择,比如整型的只提供了 Long 类型,浮点型的只提供了 Double 类型。另外,我们还提供了一个无约束的类型 udf5.

除了数据交互格式的封装,Android-VMLib 还提供了交互格式的快捷操作方法。如下图所示,

![快捷方法](https://user-gold-cdn.xitu.io/2020/5/23/1723f99e54a89a43?imageView2/0/w/1280/h/960/ignore-error/1)

那么,使用了 Resource 之后,代码会变成什么样呢?

// View 层代码
class MainActivity : CommonActivity<MainViewModel, ActivityMainBinding>() {

override fun getLayoutResId(): Int = R.layout.activity_main

override fun doCreateView(savedInstanceState: Bundle?) {
    addSubscriptions()
    vm.startLoad()
}

private fun addSubscriptions() {
    vm.getObservable(String::class.java).observe(this, Observer {
        when(it!!.status) {
            Status.SUCCESS -> { ToastUtils.showShort(it.data) }
            Status.FAILED -> { ToastUtils.showShort(it.message) }
            Status.LOADING -> {/* temp do nothing */ }
            else -> {/* temp do nothing */ }
        }
    })
}

}

// ViewModel 层代码
class MainViewModel(application: Application) : BaseViewModel(application) {

fun startLoad() {
    getObservable(String::class.java).value = Resources.loading()
    ARouter.getInstance().navi
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值