프래그먼트
프래그먼트는 액티비티나 다른 프래그먼트에 종속되어 사용이 되고, 액티비티로 구성된 뷰를 조각처럼 나누어 사용 할 수 있다.
예를 들어서 설명해보자면
액티비티로 하나의 화면이 구성된 화면에서 그 화면을 분할하여 사용하기란 어렵다. 아래에 리모컨 역할을 하는 바텀 네비게이션이 존재하고 그 위에 바텀네비게이션에 할당된 뷰를 각각 보여주는 상황을 생각해보자 ( 카카오톡을 켜보자)
위 그림처럼, 아래 파란색 부분은 고정되어 있고, 위의 녹색 부분이 아래 파란부분의 선택에 따라 뷰가 변하게된다. 이러한 구성을 편하게 사용하기 위해서, 녹색부분 뷰를 각각의 프래그먼트에 할당하여, 사용자의 요청에 따라 그 프래그먼트를 바꿔주면 된다.
현재 컴포즈가 생겨서 프래그먼트 조차 안쓰고 만들수도 있던데, 웹뷰라던지 아직 제공하는 라이브러리가 프래그먼트 만큼 많지않아서 프래그먼트 위에 컴포즈뷰를 올리는 방식이 나는 제일 좋더라. 내가 몰라서 그런가?
프래그먼트가 뭔지 알았으니 이제 통신이나, 생명주기를 알아보자
1. 생명주기
위와 같은데, 내가 마지막에 봤던 생명주기랑 좀 다른데, onViewStateRestored 와 onSaeInstanceState가 추가된 거 같다.
이 기능들도 Ui상태를 저장하고 자연스러운 인터페이스를 유지하기 위한것 같다.
액티비티상에서 뷰모델을 인스턴스하여 사용하는게 나는 대부분이라 상태저장은 큰 문제가 안되었던거 같다.
2. 프래그먼트간의 통신
1) 뷰모델 사용
나는 이게 제일 좋은 것 같은데..
mvvm구조를 사용해서 뷰 컨트롤러인 액티비티와 프래그먼트가 데이터 변화를 옵저버블 패턴으로 보고, 뷰를 업데이트한다.
액티비티에 선언된 뷰 모델을 사용하거나, 상위 프래그먼트에 선언된 뷰 모델을 사용하여 통신을 할 수 있다.
2) api사용
이 방법도 많이 사용했는데, 이건 그림으로 보면 바로 이해가 간다.
startActivity를 contract 를 통해서 사용하는 것과 같이, 이렇게 키를 통해서 반응을 받아오는 방식으로 다이얼로그 프래그먼트에서의 반응을 각각의 키로 받아서 다른 프래그먼트에서 다음 동작을 했었다.
마무리
얼마 전까지만 해도 프래그먼트와 액티비티 주제가 아주 무겁게 느껴졌었는데, mvvm을 사용해서 이 ui controller의 역할을 줄이는 것에 고민을 많이 하다보니 좀 쉽게 이해가 되었던거 같다. 그리고 컴포즈의 등장으로 프래그먼트의 xml을 통해 뷰를 그리는 일도 적어지고 데이터 바인딩을 리컴포징을 통해서 하다보니 좀 더 가볍게 읽을 수 있었다.
'안드로이드 읽어보기 > 3. 4대 컴포넌트(Component)' 카테고리의 다른 글
3) 안드로이드 구성요소 - 서비스 (0) | 2021.11.07 |
---|---|
1) 안드로이드 기본구성요소 - 아키텍쳐와 액티비티 (0) | 2021.11.06 |