1. Fragment 개념
1) 버튼을 누르면 버튼에 할당된 기능이 나타나도록 하는 기능
2) 앱 UI의 재사용 가능한 부분을 말함
3) 자체 레이아웃을 정의하고 자체 수명주기를 가져 자체 입력 이벤트를 처리할 수 있음
4) 독립적으로 존재할 수 없고 활동이나 다른 프레그먼트에서 호스팅되어야함
5) 주로 반응형 UI에서 패드 메뉴바를 모바일 환경에서 하단바로 연동할 때 사용하는 기능이기도 함
2. Fragment 최소 수명주기
1) onCreate
2) onCreateView
3) onPause
3. Fragment 구현
1) Activity_main.xml
- framelayout 구성 후 linearlayout에 버튼 구성 후 각 버튼에 크기, 무게, 이름, id를 선언
<?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/btn_1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="메뉴1"/>
<Button
android:id="@+id/btn_2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="메뉴2"/>
<Button
android:id="@+id/btn_3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="메뉴3"/>
<Button
android:id="@+id/btn_4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="메뉴4"/>
</LinearLayout>
</RelativeLayout>
2) fragment 생성
- fragment를 네 개를 만든다면 java와 layout resource를 각 네 개를 생성
- fragement를 확장해서 최소 생명주기인 onCreateView를 override
- onCreateView에 프레그먼트 레이아웃이 삽입됨(fragment0.xml)
- Inflater 선언, 팽창하고자하는 레이아웃의 ID를 선언하고 하위에 container 매개변수를 담을 ViewGroup, savedInstanceState매개변수를 담은 Bundle도 포함
- fragment0.java
package com.example.fragmentexample;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
public class Fragment1 extends Fragment {
public Fragment1() {
}
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment1, container, false);
}
}
- fragment0.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:textSize="30sp"
android:text="Loquens1"/>
</FrameLayout>
3) MainActivity.java 작성
- 전역변수에 button 선언
- findViewById로 각 버튼 불러옴
- FragmentManager로부터 fragmentTransaction 기능을 가져옴
- 각 버튼에 onClickListener를 통해 클릭하면 선언된 fragmentTransaction을 통해 기존에 담겨있는 fragment를 fragment1로 교체하고 저장( 2)의 savedInstanceState 매개변수를 위해 저장하는 기능)
- FragmentManager로부터 fragmentTransaction 기능을 가져옴
- 작성 예시
package com.example.fragmentexample;
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 = (Button) findViewById(R.id.btn_1);
btn2 = (Button) findViewById(R.id.btn_2);
btn3 = (Button) findViewById(R.id.btn_3);
btn4 = (Button) findViewById(R.id.btn_4);
btn1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
Fragment1 fragment1 = new Fragment1();
transaction.replace(R.id.frame, fragment1); // 클릭하면 fragment 교차를 할 건데 fragment1로 교체해
transaction.commit(); // 교체하면 저장해라
}
});
btn2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
Fragment2 fragment2 = new Fragment2();
transaction.replace(R.id.frame, fragment2); // 클릭하면 fragment 교차를 할 건데 fragment1로 교체해
transaction.commit(); // 교체하면 저장해라
}
});
btn3.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
Fragment3 fragment3 = new Fragment3();
transaction.replace(R.id.frame, fragment3); // 클릭하면 fragment 교차를 할 건데 fragment1로 교체해
transaction.commit(); // 교체하면 저장해라
}
});
btn4.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
Fragment4 fragment4 = new Fragment4();
transaction.replace(R.id.frame, fragment4); // 클릭하면 fragment 교차를 할 건데 fragment1로 교체해
transaction.commit(); // 교체하고 저장해라
}
});
}
}
3. 참고자료
https://developer.android.com/guide/components/fragments?hl=ko
'Development > Android Studio' 카테고리의 다른 글
(Android Studio) Chapter8. Dialog pop-up (0) | 2023.03.04 |
---|---|
(Android Studio) Chapter7. Log 출력, Thread & Handler (0) | 2023.03.01 |
(Android Studio) Chapter5. Recycler View (0) | 2023.02.23 |
(Android Studio) Chapter4. Camera (0) | 2023.02.19 |
(Android Studio) Chapter3. ListView, Navigation Menu, Shared Preferences, Web View (0) | 2023.02.12 |