可在MVVM概念的ViewModel中绘制

时间:2018-12-27 09:50:38

标签: android mvvm viewmodel android-drawable android-architecture-components

我对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内部的上下文有什么关系吗?
还是我的代码中存在任何潜在问题?

非常感谢您!

1 个答案:

答案 0 :(得分:1)

我认为您不需要使用数据绑定或查看模型。只需直接在xml文件中引用drawable。如果为null,则不会存在。这是有效的,因为您是从自己的资源中获取图像资源的。如果应该从服务器或本地数据库中获取任何可绘制对象,则您的方法会很有意义。