Fragment

Developer/Android 2014. 7. 10. 21:09

안드로이드의 Fragment(프래그먼트)는 액티비티보다 더 작은 화면 단위를 정의하고 액티비티는 프래그먼트의 집합으로 완성된 화면을 표현한다. 디자인 타임에 배치가 미리 결정되는 액티비티에 비해 실행 중에도 추가, 제거, 교체가 가능하며 동적이고 유연한 화면을 만들 수 있다. 


프래그먼트의 주요 특징

1. 액티비티를 분할하여 화면의 한 부분을 정의한다.

2. 자신만의 레이아웃, 동작, 생명 주기를 가지는 독립적인 모듈이다

3. 여러 액티비티에서 재사용 가능하다

4. 실햄 중에도 추가, 제거, 대처 가능하며 잠시 술길 수도 있다.


프래그먼트는 그 자체로 하나의 독립적 인 기능을 수행하는 모듈이다. 따라서 임임의 액티비티에서 재사용이 가능하다. 재사용성을 확보하려면 프래그먼트끼리 서로를 직접 조작하는 것은 피해야 한다. 프래그먼트는 하나의 특정한 기능을 제공할 뿐이므로 상위의 액티비티에서 소속 프래그먼트를 관리하는 것이 정석이다. 만약 두 프래그먼트가 서로 통신해야 한다면 직접하기 보다는 액티비티를 경유하는 것이 맞는 구조이다


프래그먼트의 생명주기

프래그먼트는 기능적으로 독립적인 모듈이지만 홀로 화면에 나타날 수 없다. 화면을 구성하는 조각이므로 반드시 액티비티에 소속되어야 하며 액티비티의 구성원으로 화면서 표시된다. 따라서 액티비티와 긴밀한 연관을 맺으며 액티비티의 생명주기에 따라 따라 자신의 고유 생명주기를 가진다.


void OnAttach(Activity activity)

액티비티에 프래그먼트가 처음 부착될 때 호출된다. 인수로 전달되는 activity가 바로 주인 액티비티이다. 


void onCreate(Bundle savedInstanceState)

프래그먼트가 생성될 때 호출된다. 이 단계에서는 호스트 액티비티도 아직 초기화중인 상태이며 따라서 액티비티의 컨트롤을 안전하게 참조할 수 없다. 액티비티가 완전히 초기화된 시점이 필요하면 onActivityCreated 콜백을 사용한다. savedInstanceState는 프래그먼트가 재생성될 때의 이전 상태이며 이 값을 참조하여 이전 상태를 복구한다. 


View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)

프래그먼트의 UI를 처음 그릴 때 호출되며 이 단계에서 프래그먼트는 자신의 레이아웃을 생성한 후루트 뷰를 리턴한다. 레이아웃은 보통 XML 파일로 정의하고 ㄱ전개해서 생성하는데 첫 번째 인수인 inflater로 전개자가 전달되므로 전개자를 따로 구하지 않아도 된다. 두번째 인수 container는 프래그먼트가 배치될 액티비티의 부모 뷰이며 액티비티의 이 위치에 프래그먼트가 생성 및 배치된다.


void onActivityCreated(Bundle savedInstanceState)

액티비티가 완전히 초기화되고 프래그먼트의 레아웃도 완성되었을 때 호출 된다. 


void onPause()

프래그먼트가 정지될 때 호출된다.


void onSaveInstanceState(Bundle outState)

임시 정보를 저장하는 용도로 사용된다. 



<fragment 

     android:name="com.example.fragmentex.MainActivity$CounterFragment"

     android:id="@+id/counterfragment"

     android:layout_width="match_parent"

     android:layout_height="wrap_content" 

     />


프래그먼트의 이름은 name속성에 구현 클래스의 완전한 경로를 지정한다.




























Posted by No names
,