Title : -
해당 게시물은 "깡쌤의 안드로이드 프로그래밍 with 자바" 온라인 유료 강의를 수강하며 실시간으로
정리한 내용입니다. 저작권에 의해 강의에서 제공되는 예제 코드나 교재에 첨부된 자료는 업로드하지 않고,
단순히 본인이 이해한 내용 위주의 정리글임을 사전 명시합니다.
Fragment란?
Fragment는 일종의 View이다.
안드로이드에서 UI란, 즉, 사용자에게 보여주기 위한 화면은 Activity에 적절한 View를 출력하는 것이고,
Fragment 역시 액티비티 위에 출력되기 위한 일종의 View Class라고 이해할 수 있다.
단, 액티비티처럼 동작하는 View라는 점이 핵심이다.
Fragment 구현 방법
프래그먼트 구현을 위한 XML 코드 작성은 액티비티 구현 방법과 동일하다.
그리고 해당 XML 파일을 화면에 출력하기 위한 Fragment 상속 클래스를 하나 만들어 줘야 하는데,
단순히 화면 출력의 목적 하나만 있다면, onCreateView() 라이프 사이클 함수만 오버라이드 하면 된다.
즉, 해당 함수 내부에서 프래그먼트 화면과 관련된 세팅을 준비하면 되는 것이다.
그런데 왜 onCreateView 함수 안에서 화면과 관련된 세팅을 준비하는 것일까?
onCreateView() 함수는 LayoutInflater 객체를 매개 변수로 요구하고, 해당 객체가 있다면 XML 파일을
초기화 하여 View 객체를 생성할 수 있기 때문이라고 한다.
화면에 표출할 XML 파일과 해당 파일을 출력하기 위한 프래그먼트 클래스가 준비되었다면,
해당 프래그먼트를 액티비티에 출력하기 위한 작업이 필요하다.
프래그먼트를 액티비티에 출력하기 위한 방법은 총 2가지가 있는데, 아래의 상황에 따라 선택하면 될 것이다.
1. 넓은 액티비티 화면에 여러 프래그먼트가 동시에 출력될 것이고, 그 위치가 고정적일 경우
2. 좁은 액티비티 화면에 하나의 프래그먼트씩 동적으로 변경해 가며 출력될 경우
1번 방법의 경우 XML 코드에 <fragment 태그를 이용하여 바로 등록하면 되고,
2번의 경우 액티비티 클래스에서 코드를 이용하여 동적으로 등록해 주어야 한다.
1번의 경우 액티비티 클래스에 해당하는 XML 코드를 의미하는 것이고, 아래 예제를 참고하도록 하자.
<fragment
android:id="@+id/fragment_one"
class = "com.프래그먼트 클래스 경로"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"/>
2번의 경우 액티비티 클래스에 해당하는 자바 코드를 의미하는 것이고, 아래 예제를 참고하도록 하자.
OneFragment oneFragment = new OneFragment();
FragmentManager fm = getSupportFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
ft.add(R.id.main_container, oneFragment);
ft.commit();
위 코드에서 main_container는 액티비티의 XML 파일에 프래그먼트 출력을 위해 준비한 레이아웃이다.
Fragment의 생명주기
프래그먼트의 생명주기는 모두 오버라이드 하여 구현할 필요 없이, 앞서 언급한 onCreateView()를 제외한
나머지 함수는 개발자의 필요에 따라 적절히 사용하면 된다. 기본적으로는 액티비티의 생명주기를 그대로
따라가되 프래그먼트만을 위한 생명주기 함수가 추가된 형태이다.
이러한 프래그먼트의 생명주기는 BackStack을 사용 여부에 따라 조금 차이가 발생한다.
앞서 언급한 프래그먼트 구현 2번의 경우 1번 프래그먼트가 출력된 상황에서 2번 프래그먼트로의 전환이 발생했다고
가정하자. 이때, 사용자가 백버튼을 눌렀을 경우 2번에서 1번 프래그먼트로 전환될 것이냐 아니면 바로 종료될 것이냐에
따라 백스택의 사용 여부가 정해질 것이다. (백버튼이란 원래 액티비티를 벗어나는 것이 목적이기에 프래그먼트로
화면을 전환하되 하나의 액티비티에서 이루어지고 있는 것이기 때문에 default는 1번 프래그먼트로 돌아가는 것이 아닌
액티비티를 벗어나는 것이 정상적인 동작이다.)
백스택은 2번 예제 코드에 아래 한 줄의 코드만 추가하면 끝이다.
ft.addToBackStack(null);
백스택 사용 여부에 따라 사용하는 생명주기가 조금 달라지기 때문에, 강의에서는 백스택 개념에 대해 먼저
설명하였다. 다음 게시글에 이어서 프래그먼트 생명주기에 대해 다시 알아보도록 하자.
단어 사전
[1] :
[2] :
Reference :
'2024.10~ > 일일 학습 노트' 카테고리의 다른 글
[2024-11-19] 코테 기초(입력된 문자열을 정수로 변환 후 각 자리의 합 반환하기) (1) | 2024.11.19 |
---|---|
[2024-11-17] Do it! 알고리즘 코딩테스트 with JAVA 강의 필기 노트(배열) (0) | 2024.11.17 |
[2024-11-04] 자바 입력 처리 방식 비교(2) (0) | 2024.11.05 |
[2024-11-04] 자바 입력 처리 방식 비교(1) (0) | 2024.11.04 |
[24.11.03] Android Service와 Messenger 기초 개념 다지기(1) (0) | 2024.11.03 |