Drawable в ViewModel с концепцией MVVM - PullRequest
0 голосов
/ 27 декабря 2018

Я перепутал с концепцией MVVM, что ViewModel не должен ссылаться на View.
В моем сценарии использования я должен использовать привязку данных и оборачивать Drawable by LiveData и наблюдать его значение в представлении xml.

Основываясь на предложении от Android, которое я реализовал, как показано ниже
https://developer.android.com/topic/libraries/architecture/viewmodel

Если 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, чтобы предотвратить утечку памяти?
Или потенциальная проблема в моем коде?

Большое вам спасибо!

1 Ответ

0 голосов
/ 27 декабря 2018

Я не вижу необходимости использовать привязку данных или просматривать модели для того, что вы хотите сделать.Просто обратитесь к объекту рисования непосредственно в XML-файл.Если он нулевой, его там не будет.Это верно, потому что вы получаете ресурс изображения из своих собственных ресурсов.Если бы вы должны были получить какие-либо данные из сервера или локальной базы данных, ваш подход имел бы смысл.

...