没有数据绑定的MVVM

时间:2018-11-30 13:52:38

标签: mvvm kotlin

我开始学习Kotlin来开发Android应用程序,并且对于我的第一个项目,我必须使用MVVM作为模式来将表示层与逻辑分离。我发现的有关MVVM的所有文章都使用DataBinding库将模型的数据直接绑定到xml视图。我在Java中使用了DataBinding,但我不喜欢它,因为绑定错误时很难发现错误。我的问题是,是否有另一种无需数据绑定即可使用MVVM的方法?

1 个答案:

答案 0 :(得分:3)

可以。只是一个抽象的例子:想象ViewModel

class SomeViewModel : ViewModel() {

    private lateinit var roadmap: RoleScreenRoadmap
    private lateinit var uiScope: CoroutineScope

    private val _nameRequired = MutableLiveData<Boolean>()
    private val _userName = MutableLiveData<String>()

    val nameRequired: LiveData<Boolean>
        get() = _nameRequired
    val userName: LiveData<String>
        get() = _userName

    ...
}

现在Activity

class AbstractActivity : AppCompatActivity() {

    private lateinit var viewModel: RoleScreenViewModel

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_some)
        initializeDependencies()
        performBindings()
    }

    private fun initializeDependencies() {
        viewModel = ViewModelProviders.of(this).get(AbstractViewModel::class.java)
    }



    private fun performBindings() {
        val lifecycle = ::getLifecycle
        viewModel.nameRequired.observe(lifecycle) { nameRequired: Boolean? ->
            if (nameRequired!!) {
                showNameInputWindow()
            }
        }
        viewModel.userName.observe(lifecycle, ::setTitle)
    }

    ...
}

您只需在android的生命周期组件初始化期间进行订阅,就不需要数据绑定。