본문 바로가기

Android

Fragment에 리스트 출력하기 Part.2

앞에서 인터페이스를 사용해서 이미 생성된 Fragment에게 데이터를 전달하는 방법을 구현해보았다.

하지만 그것보다 간단하게 같은 기능을 수행하도록 할 수 있다.

우리에게는 이미 Activity와 Fragment가 공유하고 있는 ViewModel 영역이 있다.

ViewModel은 Activity보다 긴 생명주기를 가지고 View 간에 데이터를 공유하기 위한 목적을 가지고 있다.

ViewModel에 Filter라는 라이브데이터를 추가하고 Activity에서 메뉴를 선택 시에 LiveData에 값을 포스트하고

TaskListFragment는 Filter를 관찰하고 있다가 변화를 감지했을 때 리스트를 바꾸어 업데이트하면 된다.

 

 

새로운 인터페이스 정의도 필요없고, 복잡한 형변환도 필요없다.

이미 구현된 뷰모델이라는 공유된 공간에 새로운 변수만 하나 추가했을 뿐이다.

 

 

LiveData 추가하기

 

TaskListFragment에서 Filter를 Observe한다.

 

Activity에서 메뉴 선택 시 Filter 값 Post하기

 

결과값

 

Summary

사실 이미 ViewModel이 있었고 LiveData를 이용한 방법을 먼저 구현했다.
하지만 다른 방법도 있는지 한번 고민해보는 과정을 거치고 싶어서 인터페이스를 이용하는 방법을 구현해보려고 했는데.

생각보다 시간을 많이 잡아먹고 결과도 깔끔하지 않아서 아쉬웠다.
그래도 이번에 NavController 구조에 대해서 조금 더 공부할수 있었고 아직 업그레이드 되고 있는 라이브러리이므로 다음 발표에 어떤 점이 개선 되는지 관심을 가지고 지켜봐야겠다.

 

실제 프로젝트에는 깔금한 LiveData를 활용한 데이터 공유를 사용하는걸로 결정.