본문 바로가기

Programming/android/tablet

java코드를 이용하여, Fragment사용하기.


지난번에는, Fragment를 xml을 이용하여 Activity를 구성하는 방법을 알아봤고, 
2011/12/04 - [Programming/android/tablet] - xml을 이용해 Fragment이용하기.
이번에는, java파일을 이용하여, 화면을 구성하는 방법을 알아봅니다.

위 아래 화면이 나누어져 있는 단순한 화면인데요,
이를 Fragment2개를 이용하여, 만들어 봅니다.

1. android sdk 3.0이상을 생성하여, 안드로이드 프로젝트를 생성하여 줍니다. 

2. res에 fragment1.xml을 생성하여 줍니다.
[ fragment1.xml ]

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout

  xmlns:android="http://schemas.android.com/apk/res/android"

  android:orientation="vertical"

  android:layout_width="match_parent"

  android:layout_height="match_parent">

  <TextView

   android:layout_width="fill_parent"

   android:layout_height="fill_parent"

   android:text="Fragment #1"

   android:gravity="center" />

</LinearLayout>

 
2. res에 fragment2.xml을 생성하여 줍니다.

[ fragment2.xml ]

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout

  xmlns:android="http://schemas.android.com/apk/res/android"

  android:orientation="vertical"

  android:layout_width="match_parent"

  android:layout_height="match_parent">

  <TextView

   android:layout_width="fill_parent"

   android:layout_height="fill_parent"

   android:text="Fragment #2"

   android:gravity="center" />

</LinearLayout> 

 
 3. Fragment1을 생성하여 줍니다.
[ Fragment1.java ] 

package fragment.example01;


import android.app.Fragment;

import android.os.Bundle;

import android.view.LayoutInflater;

import android.view.View;

import android.view.ViewGroup;


public class Frament1 extends Fragment {


@Override

public View onCreateView(LayoutInflater inflater, ViewGroup container,

Bundle savedInstanceState) {

return inflater.inflate(R.layout.fragment1, container, false);

}

}


여기서, onCreateView는 Activity의 onCreate와 같은 역할을 한다고 보시면 됩니다.

4. Fragment2.java를 생성하여 줍니다.

Fragment2.java

package fragment.example01;


import android.app.Fragment;

import android.os.Bundle;

import android.view.LayoutInflater;

import android.view.View;

import android.view.ViewGroup;


public class Frament1 extends Fragment {


@Override

public View onCreateView(LayoutInflater inflater, ViewGroup container,

Bundle savedInstanceState) {

return inflater.inflate(R.layout.fragment1, container, false);

}

} 


 5. MainActivity를 고쳐준다.
[ FragmentExample02Activity.java ] 

package fragment.example02;


import android.app.Activity;

import android.app.FragmentManager;

import android.app.FragmentTransaction;

import android.content.res.Configuration;

import android.graphics.drawable.GradientDrawable.Orientation;

import android.os.Bundle;

import android.view.WindowManager;


public class FragmentExample02Activity extends Activity {

    /** Called when the activity is first created. */

    @Override

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);

        

        FragmentManager fragmentManager = getFragmentManager();

        FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();

        

        if(getWindowManager().getDefaultDisplay().getOrientation()==Configuration.ORIENTATION_PORTRAIT){

        Fragment1 fragment1 = new Fragment1();

        fragmentTransaction.replace(android.R.id.content, fragment1);

        } else {

        Fragment2 fragment2 = new Fragment2();

        fragmentTransaction.replace(android.R.id.content, fragment2);

        }

        fragmentTransaction.commit();

    }

}

 
이렇게 작성하여 실행하여 주면, 다음과 같이 화면이 나타납니다.


Portrait모드에서는, fragment1이, Landscape모드에서는, fragment2가 나타나게 됩니다.

자바 코드에서 Dynamic하게, Fragment를 로딩하는 것입니다.
이를 어떻게 하는지 알아봅시다. 

// FragmentManager를 가지고 온다.
FragmentManager fragmentManager = getFragmentManager();
// FragmentTransaction을 가지고 온다.
FragmentTransaction fragmentTransaction = fragment.beginTransaction(); 
 
만약, 세로보기 모드라면, Fragment1을 보여준다.
여기서, android.R.id.content는, 액티비티의 content view를 나타낸다.

if(getWindowManager().getDefaultDisplay().getOrientation()==Configuration.ORIENTATION_PORTRAIT){

        Fragment1 fragment1 = new Fragment1();

        fragmentTransaction.replace(android.R.id.content, fragment1);

}
// 만약 가로보기 모드라면, Fragment2를 보여준다.
 else {

        Fragment2 fragment2 = new Fragment2();

        fragmentTransaction.replace(android.R.id.content, fragment2);

}
// Replace한 내용을 반영하기 위하여 commit()을 해준다.
// commit()을 하지 않으면, 변동사항이 반영되지 않는다. 

fragmentTransaction.commit(); 

 
위는 Fragment가 무엇인지 알아보기 위해 작성한 간단한 예제이며, 경우에 따라서 다르게 만들어 적용하셔야 합니다.

프로젝트 소스

실행파일

관련글 
2011/12/04 - [Programming/android/tablet] - xml을 이용해 Fragment이용하기.

'Programming > android/tablet' 카테고리의 다른 글

ActionBar에 메뉴 넣기.  (0) 2011.12.24
Action Bar 숨기기  (3) 2011.12.24
Fragment와 AddToBackStack  (0) 2011.12.24
xml을 이용해 Fragment이용하기.  (9) 2011.12.04
fragment란?  (0) 2011.12.04