Android MVI 详解
2020-02-21 本文已影响0人
zidea
![](https://img.haomeiwen.com/i8207483/9d76b2d36ca32f86.jpg)
![](https://img.haomeiwen.com/i8207483/a2b99d21cb943539.jpg)
![](https://img.haomeiwen.com/i8207483/5dc936b886e11a9e.jpg)
![](https://img.haomeiwen.com/i8207483/f8a3c376712a00de.jpg)
![](https://img.haomeiwen.com/i8207483/441c7ab95f4f46fa.jpg)
![](https://img.haomeiwen.com/i8207483/9c3ef99e7296de0c.jpg)
在开始之前就是这张图,我们先创建一个 sealed class 来罗列出用户的所有行为。通常以 intent 结尾。当用户启动应用最开始看到就是 InitialIntent 。这里理解可能有一些困难,这是用户并没有进行任何操作,我们可以从两个角度来理解,可以理解初始化,也可以理解为用户打开应用就是一个行为。因为这里没有任何的数据所以定义为 object 。应该是一个单例吧。当用户刷新界面时候,定义 RefreshIntent。然后我们通过勾选或取消勾选任务来表示任务是否已完成,在 TastIntent 为这两个动作创建对应的 Intent
sealed class TaskIntent{
}
sealed class TaskIntent{
object InitialIntent: TaskIntent()
}
![](https://img.haomeiwen.com/i8207483/389e32823004c3e9.jpg)
sealed class TaskIntent{
object InitialIntent: TaskIntent()
object RefreshIntent: TaskIntent()
}
![](https://img.haomeiwen.com/i8207483/d2b9d97d762aceff.jpg)
sealed class TaskIntent{
object InitialIntent: TaskIntent()
object RefreshIntent: TaskIntent()
data class ActivativeTaskIntent(val task:Task) : TaskIntent()
data class CompleteTaskIntent(val task):TaskIntent()
}
![](https://img.haomeiwen.com/i8207483/cc1354cf4ac5452c.jpg)
sealed class TaskIntent{
object InitialIntent: TaskIntent()
object RefreshIntent: TaskIntent()
data class ActivativeTaskIntent(val task:Task) : TaskIntent()
data class CompleteTaskIntent(val task:Task):TaskIntent()
object clearCompletedToTaskIntent:TaskIntent()
}
![](https://img.haomeiwen.com/i8207483/9574bec785699190.jpg)
sealed class TaskIntent{
object InitialIntent: TaskIntent()
object RefreshIntent: TaskIntent()
data class ActivativeTaskIntent(val task:Task) : TaskIntent()
data class CompleteTaskIntent(val task:Task):TaskIntent()
object clearCompletedToTaskIntent:TaskIntent()
data class ChangeFilterIntent(val filterType:TaskFilterType):TaskIntent()
}
class TaskFragment{
fun intents() : Observable<TasksIntent>{
}
}
class TaskFragment{
fun intents() : Observable<TasksIntent>{
return initialIntent()
}
private fun initialIntent():Observable<InitialIntent>{
return Observable.just(InitiailIntent)
}
}
class TaskFragment{
fun intents() : Observable<TasksIntent>{
return Observable.merge(initialIntent(),refreshIntent())
}
private fun initialIntent():Observable<InitialIntent>{
return Observable.just(InitiailIntent)
}
private fun refreshIntent() :Observable<RefreshIntent>{
return RxSwipeRefreshLayout.refreshes(swipeRefreshLayout)
.map{ RefreshIntent }
}
}
![](https://img.haomeiwen.com/i8207483/b4788a89f5f7c007.jpg)
![](https://img.haomeiwen.com/i8207483/1db0504858d2a133.jpg)
fun actionFromIntent(Intent: TaskIntent):TaskAction = when(intent){
is InitialIntent ->
is RefreshIntent ->
...
}
fun actionFromIntent(Intent: TaskIntent):TaskAction = when(intent){
is InitialIntent -> LoadAndFilterTaskAction(TaskFilteType.ALL_TASK)
is RefreshIntent ->
...
}
fun actionFromIntent(Intent: TaskIntent):TaskAction = when(intent){
is InitialIntent -> LoadAndFilterTaskAction(TaskFilteType.ALL_TASK)
is RefreshIntent -> LoadTaksAction
...
}
sealed class TaskAction {
data class LoadAndFilterTasksAction(val filterType:TaskFilterType):TaskAction()
object LoadTaskAction:TaskAction()
...
}
![](https://img.haomeiwen.com/i8207483/ef9ad32b92ce69d3.jpg)
![](https://img.haomeiwen.com/i8207483/288c6b14188c5a6b.jpg)
![](https://img.haomeiwen.com/i8207483/cedfad5a37fbefc3.jpg)
![](https://img.haomeiwen.com/i8207483/b8a9236af26e4e94.jpg)
![](https://img.haomeiwen.com/i8207483/349c0aaf26bce101.jpg)
![](https://img.haomeiwen.com/i8207483/0dccb4f52542bc91.jpg)
![](https://img.haomeiwen.com/i8207483/389feafd079c5f59.jpg)
![](https://img.haomeiwen.com/i8207483/7cb0948e123fc1c6.jpg)
![](https://img.haomeiwen.com/i8207483/57746e9a8b1e7cba.jpg)
![](https://img.haomeiwen.com/i8207483/86cfd3514db23402.jpg)
![](https://img.haomeiwen.com/i8207483/3ee28f5e43c27267.jpg)
![](https://img.haomeiwen.com/i8207483/333b5cce4f5622ec.jpg)
![](https://img.haomeiwen.com/i8207483/dd24d826f356b35c.jpg)
![](https://img.haomeiwen.com/i8207483/a130b594b7b4eaaa.jpg)
![](https://img.haomeiwen.com/i8207483/cefaa5dd161022f5.jpg)
![](https://img.haomeiwen.com/i8207483/468da031182fdc2f.jpg)
![](https://img.haomeiwen.com/i8207483/977c374e094c809e.jpg)
![](https://img.haomeiwen.com/i8207483/712c30ccf4febbb8.jpg)
![](https://img.haomeiwen.com/i8207483/d4cf43cb82fb14e7.jpg)
![](https://img.haomeiwen.com/i8207483/8a306db6b9f54528.jpg)
![](https://img.haomeiwen.com/i8207483/5129a0b31209b20a.jpg)
![](https://img.haomeiwen.com/i8207483/9eef5162a0bdeac1.jpg)
![](https://img.haomeiwen.com/i8207483/8e3fa8279dbabbef.jpg)
![](https://img.haomeiwen.com/i8207483/f1cbda17530af8b5.jpg)
![](https://img.haomeiwen.com/i8207483/75303e53c3530d12.jpg)
![](https://img.haomeiwen.com/i8207483/6f5f35ae4e68ee41.jpg)
![](https://img.haomeiwen.com/i8207483/12336c6962aab4b1.jpg)
![](https://img.haomeiwen.com/i8207483/6adf4dc5210c667f.jpg)
![](https://img.haomeiwen.com/i8207483/2e10c7a98a049f6d.jpg)
![](https://img.haomeiwen.com/i8207483/adf07d6641abe350.jpg)
![](https://img.haomeiwen.com/i8207483/6d16e4ed5676e58d.jpg)
![](https://img.haomeiwen.com/i8207483/f569bb9938ed072d.jpg)
![](https://img.haomeiwen.com/i8207483/a720e87047c6387e.jpg)
![](https://img.haomeiwen.com/i8207483/fb66894a30d4abec.jpg)
![](https://img.haomeiwen.com/i8207483/d936674ec302e8c3.jpg)
![](https://img.haomeiwen.com/i8207483/83a32ca21c5d2a31.jpg)
![](https://img.haomeiwen.com/i8207483/09cab438277fcd13.jpg)
![](https://img.haomeiwen.com/i8207483/d7639bd08f5c8a63.jpg)
![](https://img.haomeiwen.com/i8207483/fdbf0e57e2f4a5c0.jpg)
![](https://img.haomeiwen.com/i8207483/220ecb206460097c.jpg)
![](https://img.haomeiwen.com/i8207483/6755215f530cb3b2.jpg)
![](https://img.haomeiwen.com/i8207483/61f1dee4591eeda6.jpg)
![](https://img.haomeiwen.com/i8207483/dc24822ed689e6aa.jpg)
![](https://img.haomeiwen.com/i8207483/05484862db750f4f.jpg)
![](https://img.haomeiwen.com/i8207483/40a846bb6a0a18d7.jpg)
![](https://img.haomeiwen.com/i8207483/7bf12d28e8e90f8f.jpg)
![](https://img.haomeiwen.com/i8207483/e578a1af2cbfd6e1.jpg)