2011년 8월 31일 수요일

Android 3.0 Fragment

Fragment 소개

Application 개발자는 Android 3.0에 새롭게 추가된 Fragment를 이용하여 Application의 UI를
아이패드 처럼 FrameLayout으로 나눌 수 있게 되었습니다.

Fragment는 별도의 UI와 생명주기를 갖는 독립된 Application Component 이며, 특정 Device 혹은 Screen 해상도에 따라여러 개의 Fragment를 조합하거나 재배치 하는 방식으로 원하는 UI를 손쉽게 구성할 수 있습니다.

이전에도 ActivityGroup을 이용하여 복수의 Activity를 하나의 Activity에 담을 수 있었지만, 기본적으로 Activity는 독립적으로 동작하도록 설계되었기 때문에 ActivityGroup을 적절하게 활용하는 것은 쉬운 일이 아니었습니다.

지금까지 화면이 회전 되거나 설정 값이 변경됨에 현재 Activity가 Destroy 되고 이어 새로운 Activity가 생성되는 경우 두 Activity 인스턴스간에 데이터를 유지하기 위해서는 Activity.onRetainNonConfigurationInstance() 메서드를 활용해야 했습니다.  하지만 Fragment API를 활용하여, 특정 Fragment인스턴스에 적절한 플래그만 설정해주면 가능하게 되었습니다.

DialogFragment 클래스가 제공되어 Activity 라이프 사이클에 잘 부합되도록 다이얼로그 박스를 표시하는게 훨씬 수월해진다.

ListFragment클래스가 제공됩니다.  기존 ListActivity와 유사하지만, Fragmen 특성 상, 임의의 Activity에 손쉽게 포함될 수 있기 때문에 테이터 목록과 동시에 여러가지 추가 정보를 표시하기 적합합니다.

현재 실행중인 Activity에 포함되어 있는 모든 Fragment 인스턴스 정보는 해당 Activity의 'saved instance state’로 자동으로 저장되며, Activity가 잠시 종료되었다가 재 시작될때 자동으로 복원됩니다.

Fragment Lifecycle

Activity의 생명주기 메서드와 매우 유사한 형태를 띄고 있으며, 뷰 생성과 관련된 몇몇 메서드가 더 추가되어 있습니다.

onAttach(Activity)
Fragment가 Activity 레이아웃에 포함되는 순간 호출됩니다. Activity 레이아웃에 Fragment를 정적으로 배치했다면 Activity가 시작될 때 같이 호출되며, 동적으로 레이아웃에 추가할 땐 Fragment를 레이아웃에 추가하는 순간 호출됩니다.

onCreate(Bundle)
Activity의 onCreate() 콜백 메서드와 유사하게 Fragment가 최초로 생성될 때 호출됩니다.

onCreateView(LayoutInflater, ViewGroup, Bundle)
Fragment의 UI를 구성하는 뷰(View)를 반환합니다. UI를 가지지 않는 Fragment일 경우 null을 반환할 수도 있습니다.

onStart()
Fragment가 화면에 표시될 때 호출됩니다. 하지만, 아직 사용자와 상호작용은 할 수 없는 상태입니다.

onResume()
Fragment가 사용자와 상호작용을 할 수 있게 되었을 때 호출됩니다. 즉, Fragment가 완전히 화면에 표시되어 제 역할을 수행할 수 있게 된 상태입니다.

onPause()
Activity의 onPause()와 유사하게 Fragment가 사용자와 상호작용을 할 수 없게 될 때 호출됩니다. Fragment가 아직 화면에 표시되고 있는 상태이나, 다른 요소에 의해 Fragment가 가려져 상호작용을 하지 못하는 상태입니다.

onStop()
Fragment가 화면에서 보이지 않게 될 때 호출됩니다. Activity가 화면에서 보이지 않게 될 때 onStop() 메서드가 호출되는 것과 유사합니다.

onDestroyView()
Fragment가 화면에서 사라진 후, 뷰의 현재 상태가 저장된 후 호출됩니다. 여기에서 저장된 뷰의 상태는 Activity와 유사하게 Bundle 형태로 저장되며, 저장된 뷰의 상태는 onCreate() 및 onCreateView()에서 다시 불러들일 수 있습니다.

onDestroy()
Fragment가 더 이상 사용되지 않을 때 호출됩니다.

onDetach()
Fragment가 Activity 레이아웃에서 제거될 때 호출됩니다.

기존 Activity을 Fragment로 변경한다면.
  1. 화면 유형을 적절하게 잘 나누어 "fragmentlayout"를 구성한다.
  2. 두개로 분할된 화면이라면 전체 외각을 구성하는 하나의 Activity와 2개의 Fragment 로 구성된다.
  3. 기존에는 Actrivity을 상속 받았지만 Fragment를 상속 받아야 한다.
  4. Fragment는 “onCreate”대신 "oncreateView”로 변경해줘야 함. Layout 지정은 "inflater.inflate(R.layout.menu_fragment, null)" 이렇게
  5. onActivityCreated을 사용해서 이벤트 리스너나 view을 핸들링한다.
  6. Fragment는 Activity가 아니기 때문에 “findViewById”는 “getActivity().findViewById”로 변경
  7. FrameLayout는 "getFragmentManager().findFragmentById”로 찾는다.

댓글 없음:

댓글 쓰기

ETL 솔루션 환경

ETL 솔루션 환경 하둡은 대용량 데이터를 값싸고 빠르게 분석할 수 있는 길을 만들어줬다. 통계분석 엔진인 “R”역시 하둡 못지 않게 관심을 받고 있다. 빅데이터 역시 데이터라는 점을 볼때 분산처리와 분석 그 이전에 데이터 품질 등 데이...