没有数据绑定的 MVVM

Lor*_*ânc 5 mvvm kotlin

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

And*_*nin 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

    ...
}
Run Code Online (Sandbox Code Playgroud)

现在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)
    }

    ...
}
Run Code Online (Sandbox Code Playgroud)

您只需在 Android 生命周期组件初始化期间订阅即可,无需数据绑定。