안드로이드 Fragment

: ) YOUNG·2022년 10월 16일
1

안드로이드

목록 보기
3/17
post-thumbnail


Fragment

  • Activity와 마찬가지로, 사용자에게 UI화면을 제공하는데 사용하는 컴포넌트

  • 여러개의 Fragment를 하나의 액티비티에 결합하여 다양한 화면 구성의 UI를 제공할 수 있음

  • Fragment는 항상 Activity 내에서 호스팅 되어야 함

  • Fragment의 생명주기는 호스트 Activity의 생명주기에 직접적으로 영향을 받음

    • Activity가 Pause 되는 순간 모든 Fragment도 Pause된다.
    • Activity가 소멸되면 모든 Fragment도 소멸됨
  • FragmentManager를 통해 Fragment를 관리

  • Fragment는 자체 생명주기를 가진다. 따라서 Activity가 실행중인 동안 Fragment로 이루어진 분할된 화면들의 상태를 자체적으로 조작할 수 있음


Fragment 생명주기

  • 생명주기는 Android 작동 방식의 핵심으로, 생명주기를 준수하지 않으면 메모리 누수 또는 애플리케이션의 비정상 종료가 발생할 수 있음
  • onViewCreated() 에서 이벤트 처리

  • onAttach()
    • Fragment가 Activity에 붙을(attach) 때 호출됨
    • Fragment가 완벽히 생성된 단계는 아님
  • onCreate()
    • Fragment가 Activity의 호출을 받아 생성되는 단계
    • Fragment를 생성하면서 넘겨준 값들이 있다면, 이 단계에서 값을 꺼내 세팅
    • UI초기화는 진행할 수 없음
  • onCreatView()

    • Layout을 inflate하는 단계, viewBinding 진행
    • View가 초기화되는 중이기 때문에, UI 초기화 작업을 진행하면 충돌이 일어날 수 있음
  • onViewCreated()

    • View생성이 완료되었을 때 호출되는 메소드
    • UI 초기화 진행
  • onStart()

    • Fragment가 사용자에게 보여 지기 직전에 호출되는 단계
    • 해당 메소드가 호출되었을 때, Activity는 started 상태
  • onResume()

    • 사용자와 상호작용을 시작하는 단계
    • 특정 이벤트가 발생하여 포커스가 떠날 때까지 onResume 단계에 머무름
    • 프로그램 일시정지되면 onPause()가 호출되고, 다시 재개되면 onResume()을 다시 호출함
    • Resume 상태로 전환될 때마다 진행해야 되는 초기화 작업들을 세팅
  • onPause()

    • 사용자가 Fragment를 떠나면 가장 먼저 onPause()를 호출
    • Fragment가 사용자와의 상호작용을 중지하는 단계
    • 사용자가 해당 Fragment로 돌아오지 않을 수도 있기 때문에 지속되어야 하는 변경사항을 onPause에 저장
  • onStop()

    • 다른 Activity가 화면을 완전히 가리게 되는 등, 화면이 더 이상 보여지지 않게 되는 상황에서 호출됨
    • 화면이 보이지 않을 때 실행할 필요가 없는 기능들을 정지시켜 줄 수 있음
  • onDestroyView()

    • Fragment와 연결된 View Layer가 제거되는 중일 때 호출되는 단계
  • onDestroy()

    • Fragmentr가 제거되기 직전 단계
    • Fragment가 생성될 때 onCreate -> onCreateView 순으로 호출된 것과 달리, 파괴할 때는 onDestroyView에서 View를 제거한 후 onDestry가 호출된다.





FragmentManager

  • Fragment를 생성하고 Activity에 부착해준 후에는, Activity 또는 여러 Fragment간의 상호작용을 구현하는 것이 중요하다.

  • FragmentManager는 Activity와 Fragment의 중간에서 서로를 이어주는 역할

  • FragmentManager를 통해 Fragment Transaction 수행

  • FragmentManager는 back stack에 프래그먼트 추가/교체/삭제 작업에 의한 변경 사항을 push 및 pop하는 작업을 담당

Activity에 supportFragmentManager를 통해서 런타임시에 Fragment 추가/교체/삭제 작업을 할 수 있다.




FragmentManager를 통해 Fragment 찾기

  • findFragmentById() : Fragment컨테이너 내의 현재 Fragment를 참조

  • findFragmentByTag() : Fragment에 고유한 태그를 부여하여 태그를 통해서 Fragment를 참조





Fragment Transaction

  • Android Jetpack Fragment 라이브러리에서 제공하는 클래스

  • Fragment Transaction 클래스는 Fragment 추가/교체/삭제 작업을 제공

  • Fragment Transaction은 FragmentManager의 단일 수행 단위

  • 하나의 Fragment Transaction 단위 내에 Fragment Transaction 클래스가 제공하는 Fragment 추가/교체/삭제 작업등을 명시하면 된다.

  • 하나의 Fragment Transaction 단위 내에 작성된 Fragment 조작 관련 작업들은 해당 Fragment Transaction 수행될 때 모두 실행된다. 프래그먼트 조작 작업의 묶음 단위

  • beginTransaction() 메소드 호출을 통해서 생성

		val fmTransaction = supportFragmentManger.beginTransaction()
  • Fragment Transaction은 호스트 Activity가 자신의 상태를 저장하기 전에 생서되고 커밋되어야 함

    • 만약 onSaveInstanceState()를 호출한 후 Fragment Transaction이 커밋된다면 에러가 발생한다.

0개의 댓글