Skip to content
This repository has been archived by the owner on Aug 26, 2024. It is now read-only.

Latest commit

 

History

History
51 lines (41 loc) · 2.06 KB

README-CN.md

File metadata and controls

51 lines (41 loc) · 2.06 KB

中文文档

DiMvRx

简化了 MvRx, 使其可以更加方便的使用Dagger2.
主要做了如下改变:

  1. debugMode 为false时,不再需要反射,也就是线上版本不需要反射。
  2. 不再需要继承BaseMvRxActivityBaseMvRxFragment
  3. 当创建ViewModel时可以提供自己的ViewModelProvider.Factory. 如果使用Dagger2可以很方便地实现ViewModelProvider.Factory接口。
  4. 通过父Fragment共享ViewModel,当使用ViewPager时可能会用到。
  5. ViewModel不需要实现MvRxViewModelFactory来创建自身,都可以通过Dagger2的方式实现。
  6. 不需要通过State的二级构造函数去初始化State,因为State的构建不再是通过反射的方式。
  7. 还有很多别的小改动。

示例:

data class HelloWorldState(val title: String = "Hello World") : MvRxState

class HelloWorldViewModel() : MyBaseMvRxViewModel<HelloWorldState>(HelloWorldState()) {
    fun getMoreExcited() = setState { copy(title = "$title!") }
}

class HelloWorldFragment : BaseFragment() {
    private val viewModel: HelloWorldViewModel by fragmentViewModel()

    override fun EpoxyController.buildModels() = withState(viewModel) { state ->
        header {
            title(state.title)
        }
        basicRow { 
            onClick { viewModel.getMoreExcited() }
        }
    }
}

abstract class BaseFragment : Fragment(), MvRxView, ViewModelFactoryOwner {
    //ViewModelFactory is a class implements ViewModelProvider.Factory
    @Inject override lateinit var viewModelFactory: ViewModelFactory
    
    override fun onCreate(savedInstanceState: Bundle?) {
        //inject viewModelFactory with dagger
        appComponent.inject(this)
        super.onCreate(savedInstanceState)
    }
}

查看给出的两个例子了解更多使用方法。

使用方式

直接拷贝源码即可。该库只是展示来我在实践中如何将MvRx和Dagger2进行整合的,你可以对其进行修改,使其符合你的方式。