也就是说editTextView值变动->searchObs值变动并转换->调用 LotteryListRepo.getPagingFlow(this, queryStr)触发查询->以flow的形式反馈到posts变量->activity监听flow并调用adapter.submit方式反馈到页面。此页面唯一的难点也就是这里的联动理解了。 本篇章有大量的扩展方法没有贴出,可能造成阅读困难,还是推荐clone完整...
综上,可以在Repository层使用Flow获取数据,并且Retrofit、Room都有自带的Flow扩展支持,使用上基本无缝衔接;ViewModel层collect来自Repository层的Flow,进行数据转换,将Model转到VO,再利用LiveData进行UI更新。 这时候就有另外一个问题了,既然 Flow 这么好用,可以在 Repository 层中替换 LiveData 的使用,那么要不要也在 Vie...
最近在Medium上看到了Flow开发者写的几篇文章,觉得很不错,推荐给大家。 1 原文链接:https://proandroiddev.com/using-livedata-flow-in-mvvm-part-i-a98fe06077a0 最近,我一直在寻找MVVM架构中Kotlin Flow的最佳实践。在我回答了这个关于LiveData和Flow的问题后,我决定写这篇文章。在这篇文章中,我将解释如何在...
如果数据的变化能自动响应到UI、UI的输入能自动更新到数据,那该多好! MVP是以UI为驱动的模型,更新UI都需要保证能获取到控件的引用,同时更新UI的时候要考虑当前是否是UI线程,也要考虑Activity的生命周期(是否已经销毁等)。 MVP是以UI和事件为驱动的传统模型,数据都是被动地通过UI控件做展示,但是由于数据的时变性,...
MVI架构与Flow结合实现网络请求 MVVM架构下的网络请求封装与问题 相信大家都看过不少MVVM架构下的网络请求封装,一般是这样写的。 AI检测代码解析 # MainViewModel class MainViewModel { private val _userLiveData = MutableStateLiveData<User?>() val userLiveData : StateLiveData<User?> = _userLiveData ...
支持Flow+Retrofit+OkHttp实现链式http请求 支持Rxjava+Retrofit+OkHttp实现链式http请求 全局配置网络加载错误页面,并支持重新加载数据 全局配置列表空页面 封装基类:BaseActivity、BaseVMActivity、BaseFragment、BaseVMFragment、RecycleAdapter、BaseViewModel 引入LifeCycle,将ViewModel和Activity的生命周期绑定在一起 ...
在Repository 层使用 Flow 的 MVVM 实践 使用Flow 来替换 Repository 层中 LiveData 使用,主要涉及到 ViewModel 层和 Repository 层基础类的修改,而修改后的逻辑更加简洁、易读。而且官方文档也有所更新,对 LiveData 的使用场景有所限制,见:developer.android.com/topic/libra…: It may be tempting to work LiveDat...
使用 Flow 来替换 Repository 层中 LiveData 使用,主要涉及到 ViewModel 层和 Repository 层基础类的修改,而修改后的逻辑更加简洁、易读。而且官方文档也有所更新,对 LiveData 的使用场景有所限制,见: developer.android.com/topic/libra… :由于 API 设计一致,使用方法与之前没有任何更改,因此可以...
定义一个Repository接口获取Flow<PagingData<T>>数据,T应该为MovieItemModel,因为对外(ViewModel)而言,使用的都是MovieItemModel网络对象,对内使用的才是MovieEntity数据库对象interface Repository<T : Any> { fun fetchList(): Flow<PagingData<T>> }
mvvm_exm 一个MVVM架构单Activity的Android工程 Demo示例 该示例用Navigation进行页面管理 解决了下面几个问题: 闪屏页面用Navigation怎么实现 方法一:Theme 当向用户显示初始屏幕达几秒钟时,通常会滥用初始屏幕,并且用户在已经可以与应用程序交互的同时浪费时间在初始屏幕上。取而代之的是,您应该尽快将它们带到可以与应...