프래그먼트 (Fragment)

k_hyun·2023년 2월 7일
0

프래그먼트


프래그먼트는 텍스트 뷰나 버튼처럼 액티비티 화면을 구성하는 뷰이다.
액티비티처럼 동작하며, 액티비티에 작성할 수 있는 모든 코드는 프래그먼트에도 사용 가능하다.


한 화면은 하나의 액티비티 클래스에서 작성한다.
하지만 화면이 크면 너무 많은 코드를 작성해야 하는 문제가 생긴다.
이를 해결하기 위해 하나의 액티비티에 여러개의 프래그먼트를 결합하여 사용하고자 한다.

// 프래그먼트 구현
class OneFragment : Fragment() {
    lateinit var binding: FragmentOneBinding
    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        binding = FragmentOneBinding.inflate(inflater, container, false)
        return binding.root
    }
}
<!-- 프래그먼트 출력 -->
<fragment
        android:name="com.example.androidlab.OneFragment"
        android:id="@+id/fragmentView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>
<!-- 프래그먼트를 출력할 뷰 준비 -->
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/fragment_content"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

</LinearLayout>
// 프래그먼트 동적 제어
val fragmentManager: FragmentManager = supportFragmentManager
val transaction: FragmentTransaction = fragmentManager.beginTransaction()
val fragment = OneFragment()
transaction.add(R.id.fragment_content, fragment)
transaction.commit()

프래그먼트 생명주기

프래그먼트와 액티비티의 생명주기는 같다.
크게 아래 5가지 단계로 구분 된다.

  • Initialized (초기화)
  • Created (생성)
  • Started (시작)
  • Resumed (재개)
  • Destroyed (소멸)

백스택

프래그먼트가 화면에 보이지 않는 순간 제거하지 않고 저장했다가 다시 이용할 수 있는 기능
기기의 뒤로가기 버튼을 누를 때 이전 프래그먼트로 화면을 전환할 수 있다.
백 스택을 사용하지 않으면 프래그먼트가 교체될 때 기존의 프래그먼트는 onDestroy가 호출되어 제거된다.

0개의 댓글