본문 바로가기
Adroid Studio

AndroidStudio_안드로이드 스튜디오_프래그먼트 간단 사용법

by 디디찐 2022. 9. 2.
반응형


알면 알수록 더 복잡한 프래그먼트 정리해봅니다.
간단한 내용만 담아 내용이 부족할 수 있어 참고하기 좋은 블로그도 같이 봐주세요.


■프래그먼트란?

 

여러개의 프래그먼트 조합 / 하나의 프래그먼트를 여러 액티비티에 재사용


Fragment란 영어로 조각을 의미하며, 앱 UI의  재사용 가능한 부분을 나타낸다. 
Fragment는 액티비티 내에서 화면의 일부를 나타내며, 여러개의 Fragment를 조합하여 액티비티 화면 UI를 표현할 수 있다 . 또한 하나의 Fragment 를 다른 액티비티에 재사용할 수 있다.
프래그먼트는 자체 레이아웃을 정의 및 관리하고 자체 수명 주기를 보유하며 자체 입력 이벤트를 처리할 수 있다.


프래그먼트는 독립적으로 존재할 수 없어서  항상 액티비티 내에서 호스팅되어야 하며 해당 프래그먼트의 수명 주기는 호스트 액티비티의 수명 주기에 직접적으로 영향을 받습니다. 예를 들어 액티비티가 일시정지되는 경우, 그 안의 모든 프래그먼트도 일시정지되며 액티비티가 소멸되면 모든 프래그먼트도 마찬가지로 소멸됩니다. 


■프래그먼트 사용법

1.activity_main.xml 에 Fragment 추가 
2. 각각의 Fragment를 위한 Layout 리소스 xml 작성
3. 각각의 Fragment  자바 클래스 구현 (Fragment 를 상속 받는 클래스)
4. MainActivity의 onCreate()에서 Fragment 초기화 및 제어

 

 

 

1. activity_main.xml 에 Fragment 추가 

<FrameLayout>은 Fragment를 담을 레이아웃 컨테이너로,이 안에 프래그먼트가 화면에 띄워질 수 있다.
<FrameLayout>은 <FrameLayout >안에 여러화면을 겹쳐 넣을 수 있게 하는 레이아웃이다.


"

좀 더 쉽게 비유해서 말하면 Frame은 한국말로 액자(틀)인데 액자라는 틀이 있으면 그 액자에 사진을 한장만 넣을 수 도 있지만 사진을 여러개 중첩해서 스택구조로 끼워넣어 볼수도 있을 것이다. 그리그 맨위의 사진이 사라지면 그 밑에 깔려있는 사진이 보여지게되고 그럴 것이다. 이렇게 액자를 비유로 들면 쉽게 이해가 간다.  액자=프레임레이아웃, 프래그먼트 = 사진

"

출처: https://youngest-programming.tistory.com/3

 

[안드로이드] 프래그먼트(fragment) 예제 + FrameLayout

[2021-04-03 업데이트] 출처 및 참고: https://www.edwith.org/boostcourse-android/lecture/17074/ 부스트코스 소개 : 부스트코스 부스트코스는 혼자일 때보다 더 쉽게 더 많은 것을 배울 수 있는 공간, 선배 개..

youngest-programming.tistory.com

 

-activity_main.xml

각각의 버튼 위젯을 클릭 시 각각의 Fragment를 띄우도록 구현

activity_main.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>

 


2. 각각의 Fragment를 위한 Layout 리소스 xml 작성

메인 액티비티의 FrameLayout에 띄워질 각각의 Fragment

- fragment1.xml (간단한 사용법을 이해하기 위해 각 리소스 xml의 <android:text>만 다르게 작성)

<?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:layout_gravity ="center"
        android:textSize = "30dp"
        android:text = "프래그먼트1"
        ></TextView>

</FrameLayout>

 

 

 

3. 각각의 Fragment  자바 클래스 구현 (Fragment 를 상속 받는 클래스)

 

-Fragment1.java (각각 Fragment 클래스에서 연두색부분 만 각각 수정하여 작성해준다)

package com.androidpark.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);
    }
}

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

=> fragment1 을 인플레이트해주고 컨테이너에 붙여달라는 뜻이다.

 

4. MainActivity의 onCreate()에서 Fragment 초기화 및 제어

package com.androidpark.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 = 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();
                Fragment1 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();
                Fragment2 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();
                Fragment3 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();
                Fragment4 fragment4 = new Fragment4();
                transaction.replace(R.id.frame,fragment4);
                transaction.commit();
            }
        });
    }
}

 

Java 코드에서 Fragment를 다룰 때 FragmentManager와 FragmentTransaction 클래스를 사용한다.

각각 사용하기 위해서는

 


                FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
                Fragment1 fragment1 = new Fragment1();   // Fragment 초기화
                transaction.replace(R.id.frame,fragment1);  // frame 컨테이너에 fragment1로 교체하겠다.
                transaction.commit();                                    //  Fragment와 관련된 작업이 완료되었음


FragmentManager => Activity 클래스의 getSupportFragmentManager() 함수를 사용하여FragmentManager에 대한 참조를 획득한다.

 FragmentTransaction => FragmentManager의 beginTransaction() 함수를 호출하여 FragmentTransaction을 시작

 add 또는 replace = > 첫번째 파라미터(container)에 두번째 파라미터를 추가 또는 교체해준다는 뜻



■프래그먼트 참고

소스코드 참고
https://duckssi.tistory.com/13

 

#13 안드로이드 스튜디오 프래그먼트 (Fragment) 예제 [ 홍드로이드 ]

 [activity_main.xml] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 <?xml version="1.0" encodin..

duckssi.tistory.com

프래그먼트 사용법 참고

https://developer.android.com/guide/fragments/create

 

Create a fragment  |  Android Developers

Create a fragment A fragment represents a modular portion of the user interface within an activity. A fragment has its own lifecycle, receives its own input events, and you can add or remove fragments while the containing activity is running. This document

developer.android.com

https://recipes4dev.tistory.com/58

 

안드로이드 프래그먼트 기본 사용법. (Android Fragment)

1. 안드로이드 Fragment 안드로이드에서 화면에 출력되는 UI 구성의 가장 기본이 되는 요소는 Activity입니다. 안드로이드 앱이 TextView, Button 등의 위젯을 화면에 표시하기 위해서는 최소한 하나의 Act

recipes4dev.tistory.com


프래그먼트에 대해서 간단하게 정리해보았다.

프래그먼트를 활용할 수 있는 방안이 많아서 천천히 정리해보려고 한다.

반응형