프래그먼트 – 액티비티처럼 동작하는 뷰

2022. 12. 8. 02:03_Study/AndroidStudio

728x90

11-3 프래그먼트 – 액티비티처럼 동작하는 뷰 🐇¸.•*¨*•¸.•*¨*•¸.•*¨*•¸.•*¨*•

해당 자료는 강의 학습자료이며, Do it! 깡샘의 안드로이드 앱 프로그래밍 with 코틀린을 참고하였습니다.


프래그먼트 소개

 

프래그먼트가 다른 뷰와 다른 점은 액티비티처럼 동작한다는 것

액티비티에 구현되는 모든 내용은 프래그먼트 클래스에도 작성할 수 있다.

강의 자료 입니

 

 

 

 

 프래그먼트 구현 

프래그먼트는 androidx.fragment 라이브러리에서 제공
프래그먼트는 Fragment를 상속받아 작성하는 클래스
최소한으로 작성해야 하는 함수는 onCreateView()
이 함수가 자동 호출되며 반환한 View 객체가 화면에 출력

 

 

OneFragment.kt

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
    }

}

 

액티비티의 레이아웃 XML에 등록하여 프래그먼트 출력 (방법1)

- <fragment> 태그로 액티비티 화면에 프래그먼트를 출력
- <fragment> 태그의 name 속성에 프래그먼트 클래스를 지정

<fragment
    android:name="com.example.test11.OneFragment"
    android:id="@+id/fragmentView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"/>

 

 

 

액티비티 코드에서 프래그먼트 출력 (방법2)

- 코드에서 프래그먼트를 동적으로 제어(추가, 제거 등)하려면 FragmentManager로 만든 FragmentTransaction 클래스의 함수 이용
- add(int containerViewId, Fragment fragment): 새로운 프래그먼트를 화면에 추가합니다.
- replace(int containerViewId, Fragment fragment): 추가된 프래그먼트를 대체합니다.
- remove(Fragment fragment): 추가된 프래그먼트를 제거합니다.
- commit(): 화면에 적용합니다.

 

activity_main.xml

<LinearLayout
    android:id="@+id/fragment_content"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"/>

MainActivity onCreate()

val fragmentManager: FragmentManager = supportFragmentManager
val transaction: FragmentTransaction = fragmentManager.beginTransaction()
val fragment = OneFragment()
transaction.add(R.id.fragment_content,fragment)
transaction.commit()

 

 

백 스택은 프래그먼트가 화면에 보이지 않는 순간 제거하지 않고 저장했다가 다시 이용할 수 있는 기능을 말합니다.
백 스택을 사용하지 않으면 프래그먼트가 교체될 때 기존의 프래그먼트는 onDestroy까지 호출되어 제거됩니다.
백 스택을 사용하면 프래그먼트가 제거되지 않고 onDestroyView 함수까지만 호출됩니다

transaction.addToBackStack(null)

 

프래그먼트 생명주기

 액티비티의 생명주기 함수인 onCreate(), onStart(), onResume(), onPause(), onStop(), onDestory()를 그대로 가지고 있으며 호출되는 시점도 액티비티와 같다.

강의자료입니다.

초기화(initialized), 생성(created), 시작(started), 재개(resumed), 소멸(destroyed) 단계로 구분