●프래그먼트(Fragment)

- 스마트폰 화면이 커지고, 태블릿 피시의 등작으로 한 화면안에 여러 액티비티를 처리해야할 필요가 생겨났다. 그래서 하나의 액티비티안에 각각 여러개의 독립적으로 분할된 화면을 처리하기 위해 안드로이드 API 11(허니콤)부터 Fragment가 등장했다.


- Fragment를 상속받은 클래스를 만들고 FragmentManager, FragmentTransaction를 이용해서 화면 처리를 한다.







●예제

- 버튼A, B, C를 누르면 화면 변경되는 예제(지금은 잘 안쓰는 방법)


- FragmentTest.java

package study.fragment;


import android.app.Activity;

import android.app.FragmentManager;

import android.app.FragmentTransaction;

import android.os.Bundle;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;


import com.example.day0328.R;


public class FragmentTest extends Activity{

FragmentManager manager;

FragmentTransaction trans;

FragmentA fa;

FragmentB fb = new FragmentB();

FragmentC fc = new FragmentC();

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.fragment_test);

Button btn_a = (Button)findViewById(R.id.btn_a);

Button btn_b = (Button)findViewById(R.id.btn_b);

Button btn_c = (Button)findViewById(R.id.btn_c);

//OnClickListener를 implements해서 사용할 수도 있지만

//내부클래스로 만들어서 사용할 수 있다.

//재사용성이 없는 클래스는 굳이 .java로 따로 빼서 만들 필요 없다.

//프래그먼트를 제어하기 위해서는 FragmentManager를 사용해야한다.

manager = getFragmentManager();

fa = (FragmentA)manager.findFragmentById(R.id.frg_a);

//프래그먼트를 실행중에 동적으로 넣고, 빼고, 대체하려면

//FragmentTransation을 사용해야한다.

btn_a.setOnClickListener(new OnClickListener() {

public void onClick(View v) {

//fragment_a호출

trans = manager.beginTransaction();

trans.replace(R.id.frg_a, fa);

trans.commit();

}

});

btn_b.setOnClickListener(new OnClickListener() {

public void onClick(View v) {

//fragment_b호출

trans = manager.beginTransaction();

trans.replace(R.id.frg_a, fb);

trans.commit();

}

});

btn_c.setOnClickListener(new OnClickListener() {

public void onClick(View v) {

//fragment_c호출

trans = manager.beginTransaction();

trans.replace(R.id.frg_a, fc);

trans.commit();

}

});

}

}





- fragment_test.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" >

    

    <LinearLayout 

        android:layout_width="match_parent"

        android:layout_height="wrap_content"

        android:orientation="horizontal"

        android:gravity="center_horizontal">

        

        <Button 

            android:id="@+id/btn_a"

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"

            android:text="화면A"/>

        <Button 

            android:id="@+id/btn_b"

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"

            android:text="화면B"/>

        <Button 

            android:id="@+id/btn_c"

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"

            android:text="화면C"/>

        

    </LinearLayout>

    <fragment

        android:name="study.fragment.FragmentA"

        android:id="@+id/frg_a"

        android:layout_width="match_parent"

        android:layout_height="match_parent"

        android:layout_margin="10dp"/>

    

    

</LinearLayout>




- FragmentA.java

package study.fragment;


import com.example.day0328.R;


import android.app.Fragment;

import android.os.Bundle;

import android.view.LayoutInflater;

import android.view.View;

import android.view.ViewGroup;


public class FragmentA extends Fragment{

public View onCreateView(LayoutInflater inflater, ViewGroup container,

Bundle savedInstanceState) {

//개발자가 정의한 디자인 파일을 인플레이션 시킨후 반환된 뷰를 현재 메서드의 반환값으로 지정

View view = inflater.inflate(R.layout.fragment_a, container, false);

return view;

}

}




- fragment_a.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" 

    android:background="#ffdd00">

    

</LinearLayout>

 



- FragmentB.java

package study.fragment;


import com.example.day0328.R;

import android.app.Fragment;

import android.os.Bundle;

import android.view.LayoutInflater;

import android.view.View;

import android.view.ViewGroup;


public class FragmentB extends Fragment{

public View onCreateView(LayoutInflater inflater, ViewGroup container,

Bundle savedInstanceState) {

View view = inflater.inflate(R.layout.fragment_b, container, false);

return view;

}

}

 



- fragment_b.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"

    android:background="#ff2321" >

    


</LinearLayout>




- FragmentC.java

package study.fragment;


import com.example.day0328.R;


import android.app.Fragment;

import android.os.Bundle;

import android.view.LayoutInflater;

import android.view.View;

import android.view.ViewGroup;


public class FragmentC extends Fragment{


public View onCreateView(LayoutInflater inflater, ViewGroup container,

Bundle savedInstanceState) {

View view = inflater.inflate(R.layout.fragment_c, container, false);

return view;

}


}

 



- fragment_c.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"

    android:background="#22741C" >

    


</LinearLayout>












Posted by -현's-

댓글을 달아 주세요