我对MVVM的观点感到困惑,即ViewModel不应引用View。
在我的用例中,我必须使用Databinding和LiveData包装Drawable,并在xml视图中观察其值。
基于以下实施的Android的建议
https://developer.android.com/topic/libraries/architecture/viewmodel
如果ViewModel需要Application上下文,例如查找一个 系统服务,它可以扩展AndroidViewModel类并具有 构造函数,它在构造函数中接收Application,因为 应用程序类扩展了Context。
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内部的上下文有什么关系吗?
还是我的代码中存在任何潜在问题?
非常感谢您!
答案 0 :(得分:1)
我认为您不需要使用数据绑定或查看模型。只需直接在xml文件中引用drawable。如果为null,则不会存在。这是有效的,因为您是从自己的资源中获取图像资源的。如果应该从服务器或本地数据库中获取任何可绘制对象,则您的方法会很有意义。