프래그먼트

jihyo·2022년 8월 20일

Jetpack

목록 보기
2/2

프래그먼트를 사용할 때 플랫폼 API에서 제공되는 android.app.Fragment 대신 androidx.fragment 를 많이 사용한다.

프래그먼트 소개

프래그먼트도 Button 처럼 액티비티 화면을 구성하는 뷰이다. 다른 점은 액티비티처럼 동작한다는 것인데 이 말은 액티비티에서 작성할 수 있는 코드들은 프래그먼트에서도 사용 가능하다는 것이다.

넓은 화면에서 사용

프래그먼트는 태블릿과 같은 화면이 넓은 기기에서 개발 가능하도록 제공되었다.

01 Fragment

넓은 화면에서 왼쪽 오른쪽의 화면 내용을 클래스로 분리해서 만들고 액티비티에서 두 클래스를 조합하는데 두 클래스가 액티비티 화면에 출력되어야 한다. 그렇기 때문에 두 클래스를 뷰 클래스로 만들어야 하는데 뷰 클래스는 액티비티가 아니기 때문에 액티비티에 작성된 모든 내용을 뷰 클래스에 담을 수 없다. 이때 프래그먼트를 사용한다.

앞서 말한 것처럼 프래그먼트는 액티비티처럼 사용할 수 있는 뷰 클래스이기 때문에 가능하다. 양쪽의 내용을 각각의 프래그먼트에 작성하고 액티비티에서 조합하면 액티비티의 코드 길이가 복잡하게 길어지지 않는다.

일반적인 스마트폰 화면에서 사용

02 Fragment

위 그림처럼 액티비티에서 왼쪽 프래그먼트를 먼저 출력한 후 항목을 선택하면 오른쪽 프래그먼트를 출력하는 형태가 일반적이다.

대표적인 프래그먼트 사용 예시는 탭과 뷰 페이저 화면이 있다.

프래그먼트 구현

03 Manifest Fragment

프래그먼트는 뷰이지만 액티비티처럼 그 자체로는 화면에 아무것도 보이지 않는다. 그래서 구성할 레이아웃 XML 파일을 작성해야 한다.

프래그먼트는 Fragment 클래스를 상속받는다. 프래그먼트 클래스에 최소한으로 작성해야 하는 함수는 onCreateView() 이다. 자동 호출되며 반환한 View 객체가 화면에 출력된다.

04 Fragment Code

액티비티 레이아웃 XML에 등록하여 프래그먼트 출력

  1. 액티비티 레이아웃 XML에 <fragment> 태그를 사용
  2. <fragment>name 속성에 프래그먼트 클래스를 지정

activity_main.xml
05 Fragment XML에 등록

액티비티 코드에서 프래그먼트 출력

코드에서 직접 프래그먼트 객체를 생성해 화면에 출력할 때도 있다.

  1. 액티비티 레이아웃 XML 파일에 프래그먼트가 출력될 뷰 준비 (프래그먼트를 담을 수 있는 레이아웃 클래스면 된다.)

프래그먼트 출력할 뷰 예시

06 Fragment 출력할 뷰

코드에서 프래그먼트 동적제어(추가, 제거 등)

FragmentManager 로 만든 FragmentTransaction 클래스의 함수를 사용해 동적 제어한다.

07 액티비티에서 FragmentManager

  • add(int containerViewId, Fragment fragment) : FragmentTransaction 객체의 함수로 새로운 프래그먼트를 화면에 추가
    • int containerViewId : 프래그먼트가 출력될 뷰의 id값
  • replace(int containerViewId, Fragment fragment) : 추가된 프래그먼트 대체
  • remove(Fragment fragment) : 추가된 프래그먼트 제거
  • commit() : 화면에 적용

0개의 댓글