Fragment
Fragment(프래그먼트)는 앱 UI의 재사용 가능한 부분을 나타냄.
- 자체 레이아웃을 정의 및 관리
- 자체 라이프사이클(생명주기)를 보유
- 자체 입력 이벤트를 처리 가능
- 단, 단독으로 실행 불가하기 때문에 액티비티 또는 다른 프래그먼트에서 호스팅해야 함
모듈성
프래그먼트는 UI를 개별 청크로 분할할 수 있도록 하여 액티비티의 UI에 모듈성과 재사용성을 제공함.
즉, 액티비티엔 Navigation 창과 같은 전역 요소를 배치하고, 프래그먼트는 단일 화면이나 화면의 일부의 UI를 정의하고 관리하는 역할
프래그먼트를 사용하면 런타임 시 액티비티의 모양을 더 쉽게 수정할 수 있음
액티비티가 생명주기 STARTED 이상의 상태에 있는 동안 프래그먼트를 추가, 교체, 삭제할 수 있음
이런 변경 사항을 백스택에 보관할 수 있으므로 변경사항을 취소할 수 있음
Fragment Manager
Fragment Manager는 프래그먼트 백스택을 관리하는 역할로
런타임 시 사용자 상호작용에 응답해 프래그먼트를 추가, 삭제, 교체, 백스택에 추가하는 등 작업을 실행하는 클래스
1. FragmentManager에 액세스
- 액티비티나 프래그먼트에서 Fragment Manager에 액세스 가능
- FragmentActivity나 AppCompatActivity는 supportFragmentManager프로퍼티를 통해 액세스 가능
- 현재 프래그먼트의 하위 요소를 관리하는 FragmentManager에 액세스하려면 childFragmentManager 사용
- 현재 프래그먼트를 호스팅하는 부모 FragmentManager에 액세스해야 한다면 parentFragmentManager 사용
2. FragmentManager 사용 방법
- 프래그먼트의 추가, 삭제, 교체 등의 변경사항은 FragmentTransaction이라는 단일 단위로 함께 커밋됨
- FragmentManager를 사용해서 FragmentTransaction을 생성
- add(), replace(), remove() 등의 메서드를 사용해서 각 트랜잭션을 실행할 수 있음
- 트랜잭션은 commit(), commitNow() 등의 메서드를 호출해서 실행해야 함
- commit()
비동기적으로 커밋하기 때문에 트랜잭션이 즉시 실행되지는 않음
대신 트랜잭션이 가능한 빨리 기본 UI 스레드에서 실행되도록 예약됨
- commitNow()
트랜잭션을 즉시 커밋 UI 스레드에서 프래그먼트 트랜잭션을 즉시 실행할 수 있음
단, addBackStack과는 호환되지 않아 백스택에 추가할 수 없음
대부분 commit만 사용
3. 사용 예시
supportFragmentManager.commit {
replace<ExampleFragment>(R.id.fragment_container) // 프래그먼트 교체
setReorderingAllowed(true) // 성능 개선을 위해 트랜잭션 내 최적화 및 재정렬을 허용하는 옵션
addToBackStack("name") // 트랜잭션이 백스택에 저장되어 뒤로가기 버튼을 눌렀을 때 이전 상태로 돌아갈 수 있음
}
Fragment 생명주기
프래그먼트는 두 가지 주요 생명주기를 가짐
1. 프래그먼트 자체의 생명주기
2. 그 내부에 있는 뷰의 생명주기
1. Fragment Lifecycle
액티비티의 생명주기와 유사하지만, 프래그먼트는 액티비티에 종속적임
프래그먼트 생명주기는 아래와 같은 주요 콜백 메서드들로 구성됨
- onAttach()
- 프래그먼트가 액티비티에 처음 붙여질 때 호출
- 이 시점에서 액티비티 context에 액세스 가능
- onCreate()
- 프래그먼트가 생성될 때 호출
- onAttach() 이후 호출되며 UI는 아직 생성되지 않음
- 여기서 데이터 초기화나 프래그먼트가 유지해야할 상태를 처리할 수 있음
- onCreateView()
- 프래그먼트의 UI를 생성할 때 호출
- 레이아웃을 inflate하여 프래그먼트의 뷰 계층 구조를 만듦
- 이 메서드에서 레이아웃을 반환함
- onViewCreated()
- 뷰가 생성된 후 호출
- 뷰를 설정하거나, 데이터를 바인딩하는 로직을 처리할 수 있음
- onStart()
- 프래그먼트가 화면에 보이기 시작할 때 호출
- onResume()
- 프래그먼트가 사용자와 상호작용할 준비가 되었을 때 호출
- 액티비티가 onResume() 상태일 때만 프래그먼트도 이 메서드를 호출함
- 이 시점에서 프래그먼트는 활성화 상태
- onPause()
- 프래그먼트가 중단되기 직전에 호출
- 다른 프래그먼트나 액티비티로 전환될 때 호출
- onStop()
- 프래그먼트가 더 이상 화면에 보이지 않게 될 때 호출
- onDestroyView()
- 프래그먼트의 뷰가 파괴될 때 호출
- 이 시점에서 뷰와 관련된 리소스를 해제해야 함
- onDestroy()
- 프래그먼트가 완전히 파괴되기 전에 호출
- 마지막 정리 작업 처리
- onDetach()
- 프래그먼트가 액티비티에서 분리될 때 호출
2. View Lifecycle(Fragment View의 생명주기)
프래그먼트 자체의 생명주기와는 별도로 관리됨
onCreateView()에서 생성되고, onDestroyView()에서 파괴됨
즉, 뷰가 생성된 후 뷰와 관련된 작업을 수행하고 뷰가 파괴될 때 리소스를 해제해야 함
뷰 생명주기 내에서 뷰를 초기화하거나 바인딩할 때, onViewCreated() 사용하고 뷰가 파괴될 때 관련 리소스를 해제
- onCreateView()
- 뷰가 생성
- onViewCreated()
- 뷰가 완전히 생성
- 초기화 작업을 수행할 수 있음
- onDestroyView()
- 뷰가 파괴될 때 호출
- 여기서 뷰 바인딩 해제 등의 작업을 처리함
Activity와의 차이점
- 모듈성
- 프래그먼트는 보다 모듈화되고 재사용이 가능하며, 여러 액티비티에서 나타나는 UI 구성요소를 표현하기에 이상적임
- 생명주기
- 액티비티는 여러 프래그먼트를 호스트할 수 있으며, 독립적인 존재
- 프래그먼트는 자신이 속한 액티비티에 의존적임
- UI 디자인의 유연성
- 프래그먼트는 복잡한 디자인에 더 많은 유연성을 제공
- 여러 프래그먼트를 한 화면에 동시에 표시할 수 있음
- 백스택 관리
- 액티비티는 자동적으로 Stack에 넣어지고, Fragment는 Transaction을 통해서 요청해야 함
참고
https://developer.android.com/guide/fragments?hl=ko
프래그먼트 | Android Developers
이 페이지는 Cloud Translation API를 통해 번역되었습니다. 프래그먼트 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. Fragment는 앱 UI의 재사용 가능한 부분을 나
developer.android.com
https://velog.io/@asdsad8664/Activity-%EC%99%80-Fragment%EC%9D%98-%EC%B0%A8%EC%9D%B4
Activity 와 Fragment의 차이
Android Activity 와 Fragment의 차이점정의 : 안드로이드에서 액티비티는 사용자 인터페이스를 가진 단일 화면으로 작동합니다. 앱의 내용이 표시되는 프레임 또는 창과 같습니다. 각 액티비티는 독립
velog.io
'Native App > 👽Android' 카테고리의 다른 글
안드로이드 네트워크 통신 라이브러리 Retrofit, OkHttp (2) | 2024.08.12 |
---|---|
Intent란 (0) | 2024.08.05 |
Context란 (0) | 2024.07.29 |
Kotlin을 사용하는 이유 (0) | 2024.07.26 |
Android 4대 컴포넌트 (0) | 2024.07.26 |
댓글