다른 사람들이 언급했듯이 AndroidViewModel
앱을 얻기 위해 파생 할 수있는 Context
것이 있지만 주석에서 수집 한 내용에서 MVVM 목적을 무력화하는 @drawable
s 를 조작하려고합니다 ViewModel
.
일반적으로를 가지고 있어야한다는 Context
것은 ViewModel
거의 보편적으로 View
s와 ViewModels
.
ViewModel
드로어 블 을 해결하고이를 Activity / Fragment에 공급하는 대신 Fragment / Activity가 .NET Core가 소유 한 데이터를 기반으로 드로어 블을 저글링하도록하는 것이 ViewModel
좋습니다. on / off 상태에 대한 뷰에 다른 드로어 블을 표시해야한다고 가정 해 보겠습니다. ViewModel
이는 (아마도 부울) 상태를 유지해야하지만 View
그에 따라 드로어 블을 선택하는 것이 몫입니다.
DataBinding으로 매우 쉽게 수행 할 수 있습니다 .
<ImageView
...
app:src="@{viewModel.isOn ? @drawable/switch_on : @drawable/switch_off}"
/>
상태와 드로어 블이 더 많은 경우 레이아웃 파일의 다루기 힘든 논리를 피하기 위해 값을 (예 : 카드 슈트) 로 변환 하는 사용자 정의 BindingAdapter 를 작성할 수 있습니다.Enum
R.drawable.*
또는 Context
내부에서 사용하는 일부 구성 요소가 필요할 수 있습니다. ViewModel
그런 다음 외부에서 구성 요소를 만들고 ViewModel
전달합니다. DI 또는 싱글 톤을 사용하거나 in /을 Context
초기화하기 직전에 종속 구성 요소를 만들 수 있습니다 .ViewModel
Fragment
Activity
귀찮은 이유 : Context
는 Android 전용이며 ViewModel
s 에있는 항목에 따라 달라지는 것은 좋지 않습니다. 단위 테스트를 방해합니다. 반면에 자신의 구성 요소 / 서비스 인터페이스는 완전히 제어 할 수 있으므로 테스트를 위해 쉽게 모의 할 수 있습니다.
AndroidViewModel
하지만 얻을 경우에 대비Cannot create instance exception
하여이 답변을 참조 할 수 있습니다. stackoverflow.com/a/62626408/1055241