본문 바로가기

모바일프로그래밍/Android

플래그먼트(Fragment)


플래그먼트의 등장 배경  

안드로이드 3.0(허니콤)이 공개되면서 태블릿에 적합한 여러 UI들이 공개되었는데, 그 중에서 대표적인 것이 바로 플래그먼트(Fragment) 입니다. 플래그먼트는 태블릿과 같은 큰 화면을 가지는 단말에서 애플리케이션이 화면을 더 효율적으로 활용할 수 있도록 도와 줍니다.

기존에는 애플리케이션 화면을 구성하는 큰 틀이 액티비티(Activity) 하나였고, 이 안을 여러 뷰로 구성하여 정보를 표시하고, 상호 작용을 수행했습니다. 그런데, 뷰만을 사용해서 다양한 내용을 보여주기는 매우 어려웠습니다. 특히나 전체적인 UI 틀은 고정되어 있으면서 특정 부분만 변화하며 다른 내용을 표시하도록 하려면 매우 복잡한 구성이 필요했고, 서로 다른 역할을 하는 코드들이 같은 곳에 있게 되어 가독성도 떨어지고 유지보수에도 악영향을 미쳤습니다. 그래서 대부분의 애플리케이션에서는 뷰 처리의 어려움도 피하고, 코드도 분리하기 위해 액티비티 전환을 사용했습니다. 하지만 화면이 큰 단말에서는 이 방식의 구성이 화면을 쓸데없이 많이 차지한다는 단점을 가지게 됩니다. 

그래서 등장한 것이 한 화면에 가급적 다양한 정보를 표시할 수 있는 플래그먼트입니다. 플래그먼트는 액티비티처럼 관련된 코드를 한곳에 묶을 수도 있고, 일반 뷰처럼 애플리케이션 레이아웃에 플래그먼트를 자유롭게 배치할 수도 있습니다. 즉, 한 화면에 여러 플래그먼트가 표시됨과 동시에 각 플래그먼트들을 조작하는 코드들은 각각 분리되어 있는 것이죠. 아래의 허니콤용 G메일 앱을 보면 플래그먼트의 이러한 특징을 확인 할 수 있습니다.


   
출처 : 커니의 안드로이드 이야기  




플래그먼트의 생애 주기  

플래그먼트는 액티비티와 같이 플래그먼트의 상태가 계속해서 변하며, 상태가 변할 때마다 그에 해당하는 생애 주기 메서드(콜백 메서드)가 호출됩니다. 플래그먼트의 생애주기 메서드 및 각 메서드의 호출 순서는 다음과 같습니다.

         출처 : 커니의 안드로이드 이야기


  • onAttach(Activity) : 플래그먼트가 액티비티 레이아웃에 포함되는 순간 호출됩니다. 액티비티 레이아웃에 플래그먼트를 정적으로 배치했다면 액티비티가 시작될 때 같이 호출되며, 동적으로 레이아웃에 추가할 땐 플래그먼트를 레이아웃에 추가하는 순간 호출 됩니다.
  • onCreate(Bundle) : 액티비티의 onCreate() 콜백 메서드와 유사하게 플래그먼트가 최초로 생성될 때 호출됩니다.
  • onCreateView(LayoutInflater, ViewGroup, Bundle) : 플래그먼트의 UI를 구성하는 뷰(View)를 반환합니다. UI를 가지지 않는 플래그먼트일 경우 null을 반환할 수도 있습니다.
  • onStart() : 플래그먼크가 화면에 표시될 때 호출됩니다. 하지만, 아직 사용자와 상호작용은 할 수 없는 상태입니다.
  • onResume() : 플래그먼트가 사용자와 상호작용을 할 수 있게 되었을 때 호출됩니다. 즉, 플래그먼트가 완전히 화면에 표시되어 제 역할을 수행할 수 있게 된 상태입니다.
  • onPause() : 액티비티의 onPause()와 유사하게 플래그먼트가 사용자와 상호작용을 할 수 없게 될 때 호출됩니다. 플래그먼트가 아직 화면에 표시되고 있는 상태이나, 다른 요소에 의해 플래그먼트가 가려져 상호작용을 하지 못하는 상태입니다.
  • onStop() : 플래그먼트가 화면에서 보이지 않게 될 때 호출됩니다. 액티비티가 화면에서 보이지 않게 될 때 onStop() 메소드가 호출 되는 것과 유사합니다.
  • onDestroyView() : 플래그먼트가 화면에서 사라진 후, 뷰의 현재 상태가 저장된 후 호출됩니다. 여기에서 저장된 뷰의 상태는 액티비티와 유사하게 Bundle 형태로 저장되며, 저장된 뷰의 상태는 onCreate() 및 onCreateView()에서 다시 불러들일 수 있습니다. 
  • onDestory() : 플래그먼트가 더 이상 사용되지 않을 때 호출됩니다.
  • onDetach() : 플래그먼트가 액티비티 레이아웃에서 제거될 때 호출됩니다.



플래그먼트의 서브 클래스  

플래그먼트를 상속한 서브 클래스로는 DialogFragment, ListFragment, PreferenceFragment 등이 있습니다. 

  • DialogFragment : 다이얼로그를 화면에 띄웁니다. 
  • ListFragment : 아이템들을 리스트로 화면에 표시합니다. ListActivity와 동일하게 Adapter를 이용해 리스트를 뿌립니다. ListView와 관련된 주요 메소드들도 제공합니다.
  • PreferenceFragment :  PreferenceActivity와 유사합니다. 설정 화면을 만드는데 유용하게 사용될 수 있습니다.





※ 플래그먼트에 대한 더 자세한 내용은 안드로이드 개발자 사이트를 참고하시면 됩니다.