我混淆了 MVVM 的概念,即 ViewModel 不应该引用 View。
在我的用例中,我必须使用数据绑定并包装 LiveData 绘制对象,并在 xml 视图中观察其值。
基于安卓的建议,我实现如下
https://developer.android.com/topic/libraries/architecture/viewmodel
如果视图模型需要应用程序上下文,例如查找 系统服务,它可以扩展AndroidViewModel类并具有 在构造函数中接收应用程序的构造函数,因为 应用程序类扩展上下文。
MyViewModel.kt
class MyViewModel(application: Application): AndroidViewModel(application){
private val _showIcon = MutableLiveData<Drawable>
val showIcon: LiveData<Drawable>
get() = _showIcon
fun applyChanged(){
if(condition){
_showIcon.value = AppCompatResources.getDrawable(getApplication(),R.drawable.icon1)
}else{
_showIcon.value = null
}
}
}
main_activity.xml
android:drawableTop="@{viewModel.showIcon}"
问题:
这种方法适用于 MVVM 概念吗?我是否与 ViewModel 中的上下文有任何关系以防止泄漏内存问题?
或者我的代码中有任何潜在的问题?
非常感谢!
使用数据绑定或查看模型来完成您想要做的事情。只需直接在 xml 文件中引用可绘制对象即可。如果它为 null,则它不会存在。这是有效的,因为您是从自己的资源获取图像资源。如果你应该从服务器或本地数据库获取任何可绘制对象,你的方法将是有意义的。