프래그먼트는 텍스트 뷰나 버튼처럼 액티비티 화면을 구성하는 뷰이다.
액티비티처럼 동작하며, 액티비티에 작성할 수 있는 모든 코드는 프래그먼트에도 사용 가능하다.
한 화면은 하나의 액티비티 클래스에서 작성한다.
하지만 화면이 크면 너무 많은 코드를 작성해야 하는 문제가 생긴다.
이를 해결하기 위해 하나의 액티비티에 여러개의 프래그먼트를 결합하여 사용하고자 한다.
// 프래그먼트 구현
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가 호출되어 제거된다.