Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 안드로이드 스튜디오
- 스튜디오
- studio
- Github
- 유튜브
- Retrofit
- RecyclerView
- 안스
- coroutine
- 웹뷰
- image
- Android
- WebView
- 깃헙
- Gradle
- build
- dart
- 안드로이드
- viewpager
- Kotlin
- 코틀린
- 안드로이드스튜디오
- 의존성주입
- 에러
- 레트로핏
- 코루틴
- MVVM
- error
- GIT
- ADB
Archives
- Today
- Total
코딩하는 일용직 노동자
ViewModelFactory 에 대해 간략히 알아보자. 본문
생성자 없이 ViewModel을 만들어 사용하는 것은 매우 간단합니다.
하지만 ViewModel을 이용하다보면 repository 나 인스턴스들을 파라메터로 넘겨서 생성하는 경우가 많습니다.
일단 간단히 name을 전달하는 ViewModel을 만들어 테스트 해보겠습니다.
class ViewModelActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_view_model)
try {
var viewModel = ViewModelProvider(this).get(MyViewModel::class.java)
} catch (e: Exception) {
e.printStackTrace()
}
}
}
class MyViewModel(_name: String): ViewModel() {
private var name = _name
init {
Log.d("MyViewModel", "My name is $name")
}
}
이것을 실행해보면 에러가 발생합니다.
안드로이드는 Factory 클래스를 이용해 ViewModel에 원하는 파라메터를 넣어 생성하는 방법을 제공합니다.
Factory 클래스를 만들어보겠습니다.
class MyViewModelFactory(private var name: String): ViewModelProvider.Factory {
override fun <T : ViewModel?> create(modelClass: Class<T>): T {
if (modelClass.isAssignableFrom(MyViewModel::class.java)) {
return MyViewModel(name) as T
}
throw IllegalArgumentException("Not found ViewModel class.")
}
}
이제 준비가 끝났습니다. 파라메터를 전달한 Factory 객체를 만들어서 ViewModel을 생성합니다.
class ViewModelActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_view_model)
try {
val factory = MyViewModelFactory("홍길동")
var viewModel = ViewModelProvider(this, factory).get(MyViewModel::class.java)
} catch (e: Exception) {
e.printStackTrace()
}
}
}
이제 정상적으로 작동됩니다.
'안드로이드' 카테고리의 다른 글
안드로이드 스튜디오 메모리 설정 변경 (0) | 2020.06.01 |
---|---|
안드로이드10(Q) 고유식별자 변경에 관하여 (0) | 2020.05.29 |
SingleLiveEvent 로 LiveData 중복 이벤트 처리하기 (0) | 2020.05.25 |
All children of ConstraintLayout must have ids to use ConstraintSet 에러 (0) | 2020.05.22 |
코틀린 콜렉션 함수 정리 (0) | 2020.05.22 |