MVVM项目结构整理
基于Kotlin/Dagger2/RxJava/RxAndroid/Retrofit/Okhttp/ViewModel/LiveData等来实现
- 框架结构整理
MVVM – Model View ViewModel 的方式来实现
a.MVC/MVP/MVVM项目结构的区别
- 相关代码整理
a. KeyPaginator
1 2 3 4 5 6 7 8 9 10 11 12 13
| paginator = KeyPaginator<Unit, Int, Pageable<PickOrderInfo>, PickOrderInfo>( refresh = refresh, next = nextPage, nextKey = { if (it.list.isEmpty()) it.pageIndex else it.pageIndex + 1 }, dataTransformation = { it.list }, loadInitial = { client.getOrderBySortPerson(1).toObservable() }, loadAfter = { params, key -> client.getOrderBySortPerson(key).toObservable() }, pipeErrorsTo = { error(it) } )
|
b. takeWhenPair
1 2 3 4 5 6 7 8 9 10 11 12 13
| selectedProducts.takeWhenPair(productSelected) .map { (list, pair) -> val (product, selected) = pair val newProducts = ArrayList(list) if (selected) { newProducts.add(product) } else { newProducts.removeAll { it.id == product.id } } newProducts } .autoDisposable(this) .subscribe(selectedProducts)
|
c.Input/Output
1 2 3 4 5 6 7 8 9 10 11 12 13
| private val requestPickingGoodsOrderDetail = PublishSubject.create<String>()
private var pickingOrderDetail: Observable<PickingGoodsOrderDetail>
pickingOrderDetail = requestPickingGoodsOrderDetail .filter { it.isNotEmpty() } .doOnNext { showProgress() } .flatMapSingle { client.newPickingOrderGoods(it).pipeErrorsTo(error) } .doOnNext { dismissProgress() }
|
d. StringPreference.java
Link: Original: https://github.com/JakeWharton/u2020/blob/7363d27ee0356e24dcbd00dc6926d993ee56d6e2/src/main/java/com/jakewharton/u2020/data/prefs/StringPreference.java
e.LiveData
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
|
fun getPersonalOrderDetail( orderNo: String, owner: LifecycleOwner, onGetOrderDetailSuccess: (OrderDetail) -> Unit ) {
repository.getPersonalOrderDetail(orderNo) .observe(owner, Observer { resource -> resource?.work( onSuccess = { resource.data?.let { onGetOrderDetailSuccess(it) }
}, onLoading = { true } ) }) }
|