Cute Apple
본문 바로가기
개발/Android

[Android] FragmentManager란?

by 미댕댕 2022. 8. 9.

우리가 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

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

반응형

'개발 > 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

댓글