우리가 Activity 에서 Fragment 에 접근하기 위해서 종종 FragmentManager 란 녀석을 사용한다
그중에서도 supportfragmentmanager 는 빈번하게 사용된다.
그렇다면 FragmentManager 는 무엇인가에 대해 알아보자
FragmentManager❓
FragmentManager is the class responsible for performing actions on your app's fragments, such as adding, removing, or replacing them, and adding them to the back stack.
한마디로 앱의 fragment(s) 를 더하고 , 삭하고, 교체하고, 백스택에 더하는 활동을 책임지는 class
Activity 에서 접근
Every FragmentActivity and subclasses thereof, such as AppCompatActivity, have access to the FragmentManager through the getSupportFragmentManager() method.
우리는 이 getSupportFragmentManager 로 FragmentManager에 접근 할 수 있는것을 알수 있다.
(kotlin 에서는 get을 생략한 supportfragmentmanager 로 접근)
실제로 document 를 살펴보면 getSupportFragmentManager 가 FragmentManager 를 반환하는 FragmentActivity 클래스의 멤버함수로 구현되어있다.
📛그렇다면 Fragment와 Activity 의 차이는❓
=> FragmentActivity 는 Activity 의 subclass로 안드로이드 오래된 버전과의 호환성을 위해 추가적 메소드를 제공하지만 별차이는 없다.
FragmentManager 특징
- FragmentManager 는 프래그먼트 백스택을 관리
- 각각의 변화는 'FragmentTransaction' 이라는 하나의 단위로 commit
- 유저가 back 버튼을 누르거나 FragmentManager.popBackStack() 를 호출하면 가장위에있는 트랜잭션이 pop
- 더이상 pop 할 Fragment 가 없고 자식 Fragment 가 없다면 activity 로 거슬로 올라감
supportFragmentManager.commit {
replace<ExampleFragment>(R.id.fragment_container)
setReorderingAllowed(true)
addToBackStack("replacement")
}
[실제 프로젝트에서 사용 예시]
//Activity 의 R.id.fragmentContainer 에 PlayerFragment() 를 붙이기
supportFragmentManager.beginTransaction()
.replace(R.id.fragmentContainer, PlayerFragment())
.commit()
//Activity 에서 fragment 를 찾아서 해당 fragment 의 함수를 호출
supportFragmentManager.fragments.find { it is PlayerFragment }?.let {
(it as PlayerFragment).play(url,title)
}
참고
https://developer.android.com/guide/fragments/fragmentmanager
반응형
'개발 > Android' 카테고리의 다른 글
[Android] PendingIntent 와 getBroadcast() (0) | 2022.08.11 |
---|---|
[Android] ExoPlayer2 사용기 (0) | 2022.08.10 |
[Android] Vector 와 Bitmap (0) | 2022.08.08 |
[Android] DP 와 SP (0) | 2022.08.07 |
[Android] MVC & MVVM & MVP (0) | 2022.08.06 |
댓글