본문 바로가기
Android

ViewModel에서 startActivity 적응

by YoonTaeseong 2019. 12. 10.

AAC중 하나인 MVP에서는 view 와 Presenter가 의존성이 있어서 뷰 에서 클릭 이벤트 발생 시 Presenter에서 이벤트 처리를 해주는 방식으로 구현을 하였다.

 

 

 

이렇게 넘어가도록 구현을 했지만 ViewModel 에서는 View와의 의존성을 제거한 상태여서 View에 데이터만 넘겨주는것이지 직접 관리를 하지 않는다 생각한다. 처음에는 이를 모르고 ViewModel에서 구현을 아래 그림처럼 하였다.

 

 

바로바로 사진을 못찍어서 급하게 만든 함수인데 원래 클릭하면 액티비티가 실행되고 Bundle과 같이 position값에 따른 id를  넘겨주는 코드였습니다 ㅜㅜ,,

 

아무래도 view와의 의존성을 제거 했는데 view를 관리해주는게 이상하다 싶어서 어떻게 LiveData로 관리를 할 수 없을까 하다가 Kotlin에 있는 Pair 클래스를 사용하기로 하였다.

 

내가 바꿔준 코드는 다음과 같다 Pair 클래스를 이용하여 Pair의 first 에 들어갈 제네릭은 List형태의 MovieResult data class  second 에 들어갈 제네릭에는 Int 값  즉, second 에 들어갈 변수는 해당 고유의 id 가 들어가는 것이다.

액티비티에서는 이렇게 구현하였다. 관찰하고있던 movieListData 의 두 번째 값이 0이 아닐시 해당id 를 함께 다음 액티비티로 넘겨주었다.

 

그리고 Pair에 대해 자세히 알아보았다.

코틀린에서 구조분해 선언으로도 이용되며 ex) val(index, value) = 1 to "one" 주로 두가지의 다른 데이터형을 초기화 할 때 이용된다.

 

이상 ViewModel startActivity 포스팅을 마치겠습니다.

댓글