fragment

노력을 즐기는 사람·2020년 7월 10일
0

사오정 앱개발

목록 보기
1/11

Fragment..

하나의 Activity안에 여러개의 Fragment를 사용할 수 있고 사용한 Fragment를 다른 Activity에서 재사용할 수 있다. Fragment는 Activity처럼 LifeCycle을 가지고 있고 이벤트를 발생시킬 수 있다.

그렇지만 Fragment는 항상 하나의 Activity에 의해 호스팅되어야하고 Fragment가 LifeCycle을 가지고 있기는 하지만 Activity에 종속적이다. 예를들면 Activity가 onPause 상태가 되면 Fragment의 LifeCycle도 따라간다. Fragment의 LifeCycle이 호스팅한 Activity에 종속적인 것만 제외하면 Activity와 거의 동일하기 때문에 Fragemnt는 자신을 호스팅한 Activity의 backstack에 들어갈 수 있다. backstack을 통해 Fragment를 Managing하면 back button을 눌러서 이전에 보면 화면을 다시 볼 수 있게 된다.

Fragment를 Activity에 등록하면 이 녀석은 Acitivity View Hierachy안에 있는 ViewGroup에 존재하고 자신의 view를 정의한다. Fragment를 등록하는 방법은 2가지가 있는데 XML로 정의할 수 있고 Java/Kotlin 같은 Language를 사용할 수 있다.

Fragment는 Android 3.0부터 도입이 되었는데 테블릿 등 스크린 화면이 큰 기기들이 등장하면서 UI 요소들을 다양하게 조합하고 교체할 수 있으면 좋겠다는 필요 때문에 등장했다고 한다.

Fragment를 생성하기 위해서는 꼭 Fragment의 subclass를 생성해야 한다. 아까도 언급했듯이 Activity의 코드랑 유사하게 작성된다고 한다. 왜냐하면 Activity처럼 onCreate(), onStart(), onPause(), onStop() 같은 callback methods를 포함하고 있기 때문이다. Fragment의 LifeCycle은 다음과 같다.

이렇게 많은 LifeCycle이 있지만 대부분 onCreate(), onCreateView(), onPause() method를 Overriding 한다고 한다. 잠시 LifeCycle을 살펴보면 onCreateView()에서 Fragment의 UI들이 Activity에 그려진다고 한다. 그래서 onCreateView()를 Overriding하지 않으면 안된다. 그리고 onCreateView()에서는 Fragment Root View를 Return해줘야 한다. 이건 이따 코드에서 살펴보자

Fragment의 subclass 종류를 조금 살펴보면 DialogFragment, ListFragment, PreferenceFragmentCompat이 있다. DialogFragment는 아직 나도 잘 모르겠고 나머지 두개를 조금만 설명하자면 아래와 같다.

  • ListFragment: SimpleCursorAdapter 같은 adapter로 아이템 리스트를 렌더링한다. ListAcitivity와 비슷하다. 리스트들을 조작하기 위한 메소드를 제공하는데 onListItemClick() 같은 클릭 이벤트 메소드가 예시이다. ※ ListView 대신 RecyclerView를 사용하세요... ※ RecyclerView로 List 만드는 법은 여기를 참고하세요

  • PreferenceFragmentCompat: 앱 설정 페이지 만들 때 많이 사용한다고 한다. 궁금하면 참고

이정도면 Fragment의 기본동작을 이해했으니 예제를 작성해서 몸에 익혀보자. 그리고 더 많은 내용을 알고 싶다면 공식문서를 참고하자

예제코드와 완성 화면

예제코드

https://github.com/plzprayme/saojeng/commit/783c28373c4fe5a21f3f74a1856e353ef7148559

완성 화면

첫 화면

아래 버튼을 눌렀을 때의 각각 화면

참고문서

맛있는 프로그래머의 일상 블로그
구글에서 찾은 해외 개발자 블로그?사이트? 아무튼 그거
진리의 구글 공식 문서 하지만 코드 전문을 제공하지 않음

profile
노력하는 자는 즐기는 자를 이길 수 없다

0개의 댓글