●프래그먼트(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> |
'프로그래밍 > 안드로이드' 카테고리의 다른 글
안드로이드 뷰페이저(ViewPager) (0) | 2015.04.07 |
---|---|
안드로이드 액션바 (ActionBar) (0) | 2015.04.01 |
안드로이드 애니메이션2 (0) | 2015.03.30 |
안드로이드 핸들러(Handler) (0) | 2015.03.30 |
안드로이드 쓰레드 (Thread) (0) | 2015.03.26 |
댓글