我开始学习Kotlin来开发Android应用程序,并且对于我的第一个项目,我必须使用MVVM作为模式来将表示层与逻辑分离。我发现的有关MVVM的所有文章都使用DataBinding库将模型的数据直接绑定到xml视图。我在Java中使用了DataBinding,但我不喜欢它,因为绑定错误时很难发现错误。我的问题是,是否有另一种无需数据绑定即可使用MVVM的方法?
答案 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的生命周期组件初始化期间进行订阅,就不需要数据绑定。