구조
액티비티(A) 위에 프래그먼트(B)를 얹고, 그 프래그먼트(B) 위에 프래그먼트(C)를 또 얹었다.
자녀 프래그먼트(C)위의 버튼을 눌러서 프래그먼트(C)를 다른 프래그먼트(C')로 교체하는 코드이다.
코드
MyPageFragment.kt (부모 프래그먼트. 프래그먼트 B)
var frontFragment = FrontFragment()
var backFragment = BackFragment()
class MyPageFragment : Fragment() {
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
return inflater.inflate(R.layout.fragment_my_page, container, false)
}
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
}
// frontFragment로 전환하는 함수
fun front(){
childFragmentManager.beginTransaction()
.replace(R.id.fragment, frontFragment)
.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
.commit()
}
// backFragment로 전환하는 함수
fun back(){
childFragmentManager.beginTransaction()
.replace(R.id.fragment, backFragment)
.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
.commit()
}
}
먼저, 부모 프래그먼트의 코드에 자녀 프래그먼트를 frontFragment(프래그먼트 C)나 backFragment(프래그먼트 C')로 바꾸는 front(), back() 함수들을 만들어줬다.
액티비티 위에 그려진 프래그먼트를 교체할때는 supportFragmentManager.begineTransaction()을 사용하지만,
프래그먼트 위에 그린 프래그먼트를 교체할때는 childFragmentManager.beginTransaction()을 사용해야한다.
FrontFragment.kt (자녀 프래그먼트. 프래그먼트 C)
class FrontFragment : Fragment() {
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_bodyfront, container, false)
}
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
BUTTON.setOnClickListener {
(parentFragment as MyPageFragment).back()
}
}
}
그 후, 자녀 프래그먼트에서 버튼클릭시 함수를 호출하는 코드를 써줬다.
중요한건, 액티비티에서 프래그먼트를 그리는 상황이랑 코드가 다르다.
프래그먼트에서 액티비티를 접근할때 사용하는 (activity as ACTIVITY_NAME).FUNCTION_NAME()이 아니라
(parentFragment as FRAGMENT_NAME).FUNCTION_NAME() 으로 사용해야한다.
728x90
'프로그래밍 > Kotlin' 카테고리의 다른 글
나중에 하는거긴 한데 선수들 골 넣을때 누르는 버튼 (0) | 2021.08.11 |
---|---|
달력 커스텀 (0) | 2021.08.11 |
플로팅 버튼 (0) | 2021.08.09 |
우연히 찾은 뒤로가기 만드는 법 (0) | 2021.08.09 |
imageview 원형으로 만들기 (0) | 2021.08.05 |