최근 안드로이드 앱은 테블릿 pc 등 다양한 화면 환경에서 복잡한 레이아웃과 뷰 위젯 배치로 인해 activity 만을 사용하여 구성하기엔 버거운 면이 많았습니다.
그래서 Fragment 라는 개념이 추가되었는데, 프래그먼트는 액티비티 화면 내에서 화면 UI의 일부를 나타냅니다.
여러 개의 프래그먼트를 조합하여 액티비티를 출력하는 한 화면을 구성할 수 있습니다.
또한 한개의 프래그먼트를 다양한 액티비티에 재사용할 수 있습니다.
그리고 한 화면에 들어가는 다양한 요소를 프래그먼트 단위로 관리하기 때문에 복잡도를 줄일 수 있습니다.
다음과 같이 간단하게 메인액티비티를 구성하였습니다.
메뉴 버튼 4개를 추가하여 각각 버튼 터치시마다 다른 Fragement를 보여줄 예정입니다.
메인 액티비티 xml 구성
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<FrameLayout
android:id="@+id/frame"
android:layout_width="match_parent"
android:layout_height="match_parent">
</FrameLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_alignParentBottom="true"
>
<Button
android:id="@+id/btn1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="메뉴1">
</Button>
<Button
android:id="@+id/btn2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="메뉴2">
</Button>
<Button
android:id="@+id/btn3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="메뉴3">
</Button>
<Button
android:id="@+id/btn4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="메뉴4">
</Button>
</LinearLayout>
</RelativeLayout>
프래그먼트 1.xml
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="인수 천재"
android:textSize="30sp">
</TextView>
</FrameLayout>
프래그먼트 2.xml
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="인수 바보"
android:textSize="30sp">
</TextView>
</FrameLayout>
매인엑티비티 .java
package com.example.myfregment;
import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentTransaction;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
public class MainActivity extends AppCompatActivity {
Button btn1,btn2,btn3,btn4;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn1 = findViewById(R.id.btn1);
btn2 = findViewById(R.id.btn2);
btn3 = findViewById(R.id.btn3);
btn4 = findViewById(R.id.btn4);
btn1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
FragmentTransaction transaction =getSupportFragmentManager().beginTransaction();
Fragment fragment1 =new Fragment1();
transaction.replace(R.id.frame , fragment1);
transaction.commit();
}
});
btn2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
FragmentTransaction transaction =getSupportFragmentManager().beginTransaction();
Fragment fragment2 =new Fragment2();
transaction.replace(R.id.frame , fragment2);
transaction.commit();
}
});
btn3.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
FragmentTransaction transaction =getSupportFragmentManager().beginTransaction();
Fragment fragment3 =new Fragment3();
transaction.replace(R.id.frame , fragment3);
transaction.commit();
}
});
btn4.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
FragmentTransaction transaction =getSupportFragmentManager().beginTransaction();
Fragment fragment4 =new Fragment4();
transaction.replace(R.id.frame , fragment4);
transaction.commit();
}
});
}
}
각각 버튼 클릭시에
FragmentTransaction 과 Fragment 객체를 생성해줍니다.