2013년 2월 5일 화요일

[Android] Fragment 화면연결

Fragment를 Activity와 연결하기 위해서는 FragmentManager 객체와 FragmentTransaction 객체 가 필요하다.
화면구성순서는 아래와 같다.

  1. Fragment Class를 생성해 준다.
  2. getFragmentManager() Method를 통해 FragmentManager객체를 생성한다.
  3. FragmentManager 객체의 beginTransaction() 메소드를 호출하여 FragmentTransaction을 생성해준다.
  4. FragmentTransaction 객체의 add() 메소드를 이용하여 Fragment를 추가해준다.
  5. commit()를 호출해 주면 연결이 된다. 
  • commit()이 호출된 이후 바로 Fragment를 호출해 주는 것이 아니므로 사양이 낮은 Tablet은 시간차가 발생할 수 있다. 즉시 화면이 출력하고자 한다면 FragmentManager.executePendingTransactions() method를 호출하면 된다.
◆ XML 화면
<?xml version=”1.0” encoding=”utf-8”?>
<linearlayout xmlns:android=”http://schemas.android.com/apk/res/android”
    android:layout_width=”match_parent”
    android:layout_height=”match_parent”
    android:orientation=”vertical”>

    <FrameLayout
        android:id=”@+id/fragmentLayout”
        android:layout_width=”match_parent”
        android:layout_height=”match_parent”>
    </FrameLayout>

</LinearLayout>


◆ Activity 화면
public class LifeCycleOfFragmentActivity extends Activity {
 private static final String TAG = "LifeCycleOfFragment";

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  // TODO Auto-generated method stub
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_lifecycle_fragment);
  Log.e(TAG, "Activity >> onCreate");

  WawooPsFragment wf = new WawooPsFragment();
  FragmentTransaction ft = getFragmentManager().beginTransaction();
  ft.add(R.id.fragmentLayout, wf).commit();

 }

 @Override
 protected void onStart() {
  // TODO Auto-generated method stub
  super.onStart();
  Log.e(TAG, "Activity >> onStart");
 }

 @Override
 protected void onResume() {
  // TODO Auto-generated method stub
  super.onResume();
  Log.e(TAG, "Activity >> onResume");
 }

 @Override
 protected void onPause() {
  // TODO Auto-generated method stub
  super.onPause();
  Log.e(TAG, "Activity >> onPause");
 }

 @Override
 protected void onStop() {
  // TODO Auto-generated method stub
  super.onStop();
  Log.e(TAG, "Activity >> onStop");
 }

 @Override
 protected void onDestroy() {
  // TODO Auto-generated method stub
  super.onDestroy();
  Log.e(TAG, "Activity >> onDestroy");
 }
}

FragmentTransaction.add() method의 매개변수이다.

public abstract FragmentTransaction add (int containerViewId, Fragment fragment)
public abstract FragmentTransaction add (int containerViewId, Fragment fragment, String tag)

  • containerViewId : Fragment를 식별하는 사용하는 Unique한 ID가 된다. 만약  Id를 0으로 설정하며 되면 Activity에 Fragment가 등록되지 않는다.
  • fragment : Activity와 연결 시킬 fragment이다.
  • tag : Unique한 ID 를 대신하여 Fragment를 찾는데 사용하는 옵션이다. 


◆ Fragment 화면
public class WawooPsFragment extends Fragment {
 private static final String TAG = "WaooPsFragment";

 @Override
 public void onAttach(Activity activity) {
  // TODO Auto-generated method stub
  super.onAttach(activity);
  Log.d(TAG, "Fragment >> onAttach");
 }

 @Override
 public void onActivityCreated(Bundle savedInstanceState) {
  // TODO Auto-generated method stub
  super.onActivityCreated(savedInstanceState);
  Log.d(TAG, "Fragment >> onActivityCreated");
 }

 @Override
 public View onCreateView(LayoutInflater inflater, ViewGroup container,
   Bundle savedInstanceState) {
  // TODO Auto-generated method stub
  Log.d(TAG, "Fragment >> onCreateView");
  return super.onCreateView(inflater, container, savedInstanceState);
 }

 @Override
 public void onCreate(Bundle savedInstanceState) {
  // TODO Auto-generated method stub
  super.onCreate(savedInstanceState);
  Log.d(TAG, "Fragment >> onCreate");
 }

 @Override
 public void onStart() {
  // TODO Auto-generated method stub
  super.onStart();
  Log.d(TAG, "Fragment >> onStart");
 }

 @Override
 public void onResume() {
  // TODO Auto-generated method stub
  super.onResume();
  Log.d(TAG, "Fragment >> onResume");
 }

 @Override
 public void onPause() {
  // TODO Auto-generated method stub
  super.onPause();
  Log.d(TAG, "Fragment >> onPause");
 }

 @Override
 public void onStop() {
  // TODO Auto-generated method stub
  super.onStop();
  Log.d(TAG, "Fragment >> onStop");
 }

 @Override
 public void onDestroyView() {
  // TODO Auto-generated method stub
  super.onDestroyView();
  Log.d(TAG, "Fragment >> onDestroyView");
 }

 @Override
 public void onDestroy() {
  // TODO Auto-generated method stub
  super.onDestroy();
  Log.d(TAG, "Fragment >> onDestroy");
 }

 @Override
 public void onDetach() {
  // TODO Auto-generated method stub
  super.onDetach();
  Log.d(TAG, "Fragment >> onDetach");
 }
}


Fragment LifeCycle은 이전에 포스팅 했지만 코드 작성을 한김에 한번 확인 보면 아래 와 같이 나타 난다.

Activity_onCreate() Fragment_onAttach() ▶ Fragment_onCreate() ▶ Fragment_onCreateView ▶ Fragment_onActivityCreated() ▶ Activity_onStart() ▶ Fragment_onStart() ▶ Activity_onResume() ▶ Fragment_onResume() ▶ Fragment_onPause() ▶ Activity_onPause() ▶ Fragment_onStop() ▶ Activity_onStop() ▶ Fragment_onDestoryView() ▶ Fragment_onDestory() ▶ Fragment_Detach() ▶ Activity_onDestory() 

관련글 
  1. 프레그먼트 생명주기(Fragment LifeCycle)
  2. [Android]Fragment example(프레그먼트 예제)

댓글 없음:

댓글 쓰기