Side Proeject - Carrot Market
중고 거래 앱 당근 마켓의 간단한 기능을 구현한 프로젝트
학습 회고
오늘은 중고 거래 앱 개발을 마치고 학습했던 Fragment에 대해 보충 공부를 하였다.
오늘 공부한 내용
- Fragment와 Activity의 통신
Fragment는 FragmentActivity로부터 독립적인 객체로 구현되어 여러 개의 액티비티 안에서 사용할 수 있다.
그리고 프래그먼트 인스턴스는 해당 프래그먼트를 포함하고 있는 액티비티에 직접적으로 연결되어 있다.
따라서, 프래그먼트는 getActivity()를 사용해서 FragmentActivity 인스턴스에 접근할 수 있고 액티비티 레이아웃에서 뷰를 찾는 등의 작업을 수행할 수 있다.
val listView: View? = activity?.findViewById(R.id.list)
반대로 액티비티에서도 프래그먼트 안의 메서드를 호출할 수 있다.
Framgent Manager에서 Fragment에 대한 참조를 findFragmentById()나 findFragmentByTag()를 호출해서 가져올 수 있다.
val fragment = supportFragmentManager.findFragmentById(R.id.example_fragment) as ExampleFragment
- Fragment 수명 주기 처리
프래그먼트의 수명 주기를 관리하는 것과 액티비티의 수명 주기를 관리하는 것은 매우 유사하다.
프래그먼트의 수명 주기 중 세 가지 상태에 대해 알아보자.
- Resumed
프래그먼트가 실행 중인 액티비티에 표시된다.
- Paused
다른 액티비티가 포그라운드에 있고 포커스를 가지고 있으며, 호스트 액티비티도 여전히 표시되고 있는 상태이다.
- Stopped
프래그먼트가 보이지 않는 상태이다. 호스트 액티비티가 정지되었거나 프래그먼트가 액티비티에서 제거되었지만 백 스택에 추가된 상태이다. 사용자에게 프래그먼트는 표시되지 않으며 액티비티를 종료하면 프래그먼트도 종료된다.
액티비티와 프래그먼트 수명 주기의 큰 차이점은 백 스택에 저장되는 방법이다.
액티비티는 정지되면 기본적으로 시스템에서 관리하는 액티비티의 백 스택에 들어간다.
하지만 프래그먼트는 프래그먼트를 제거하는 트랜잭션에서 addToBackStack()을 호출해서 인스턴스를 저장하라고 명시적으로 요청할 경우에만 호스트 액티비티에서 관리하는 백 스택으로 들어간다.
이외에는 액티비티의 수명 주기를 관리하는 것과 프래그먼트 수명 주기를 관리하는 것은 아주 비슷하다.
호스트 액티비티의 수명 주기는 프래그먼트의 수명 주기에 직접적인 영향을 미친다.
따라서 액티비티에 대한 각 수명 주기 콜백이 각 프래그먼트에 비슷한 콜백을 발생시킨다.
액티비티가 onPause()를 받으면, 해당 액티비티 내의 각 프래그먼트가 onPause()를 받는다.
프래그먼트에는 프래그먼트의 UI를 빌드하고 소멸시키는 등과 같은 작업을 수행하기 위해서 액티비티와의 고유한 상호작용을 처리하는 몇 가지 수명 주기 콜백이 있다.
- onAttach()
프래그먼트가 액티비티와 연결되어 있었던 경우에 호출된다. 여기에서 Activity가 전달된다.
- onCreateView()
프래그먼트와 연결된 뷰 계층을 생성하기 위해 호출된다.
- onActivityCreated()
액티비티의 onCreate() 메서드가 반환할 때 호출된다.
- onDestroyView()
프래그먼트와 연결된 뷰 계층이 제거되는 중일 때 호출된다.
- onDetach()
프래그먼트가 액티비티와 연결이 끊어지는 중일 때 호출된다.
https://developer.android.com/guide/components/fragments?hl=ko#kotlin
\
'Android > Side Projects' 카테고리의 다른 글
Youtube 앱 개발하기 (0) | 2022.03.01 |
---|---|
Youtube 앱 개발하기 (0) | 2022.02.28 |
Airbnb 앱 개발하기 (0) | 2022.02.26 |
Airbnb 앱 개발하기 (0) | 2022.02.25 |
Airbnb 앱 개발하기 (0) | 2022.02.24 |