반응형
Activity 에서 Fragment 변경하기
Fragment 1 에서 버튼을 클릭하여 상위 Activity 의 method를 호출하고, (이전 글 참고)
그 method 에서 Fragment 1 을 Fragment 2 로 변경하는 것을 해보겠습니다.
이전 글에 이어서 작성하는 것이라서
혹시 따라하기를 원하신다면 이전 포스트를 먼저 보시고 오시면 됩니다~
우선 Fragment 하나를 더 만들어보겠습니다.
이름은 LogoutFragment
자동으로 생성된 코드는 지우고, viewBinding 으로 사용할것이므로, 다음과 같이 코드를 작성합니다.
class LogoutFragment : Fragment() {
lateinit var binding: FragmentLogoutBinding
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
binding = FragmentLogoutBinding.inflate(inflater, container, false)
return binding.root
}
}
그리고 이 Fragment 에서도 상위 Activity 의 method 를 호출하기 위해서
버튼을 생성합니다. (기본으로 생성되어있던 TextView 는 삭제해도 됩니다.)
res > layout > fragment_logout.xml 을 열어서 버튼을 추가합니다.
그리고 id 와 text 를 변경합니다.
design tool 의 attributes tab 에서도 변경도 가능합니다.
id 를 입력했으니, 소스에서 클릭 리스너를 설정합니다.
binding.logoutButton.setOnClickListener {
val activity = activity as FragmentTestActivity?
activity?.someMethodInActivity(1)
}
(주의)
LoginFragment 에서는 activity?.someMethodInActivity(0)
LogoutFragment 에서는 activity?.someMethodInActivity(1)
이제 상위 Activity 인 FragmentTestActivity 에서 someMethodInActivity() 를 수정해서 Fragment 들을 바꿔보겠습니다.
상위 Activity (FragmentTestActivity) 수정
fun someMethodInActivity(num: Int){
Log.d("someMethodInActivity", "parameter : $num")
when(num){
0 -> supportFragmentManager.beginTransaction().replace(binding.fragmentContainerView.id, LogoutFragment()).commit()
1 -> supportFragmentManager
.beginTransaction()
.replace(binding.fragmentContainerView.id, LoginFragment())
.commit()
}
}
LoginFragment 에서 num 을 0 으로 넘기면 id 가 fragmentContainerView 에 LogoutFragment 를 넣고,
LogoutFragment 에서 num 을 1 로 넘기면 LoginFragment 를 넣는 코드입니다.
참고로 0 보다는 1 의 코드 스타일을 권장합니다. 이유는 디버깅할 때 오류나는 라인을 찾기 쉽기 때문입니다.
그리고 앱을 실행해서 확인해봅니다.
버튼을 누를 때 마다, 서로 바뀌는것을 확인할 수 있습니다.
다음은 Navigation 을 사용해서 Fragment 를 바꿔보는 것을 해보겠습니다.
728x90
반응형
'Android' 카테고리의 다른 글
[Kotlin] Fragment 와 BottomNavigationView 사용 (0) | 2023.07.31 |
---|---|
[Kotlin] FrameLayout 사용해서 Fragment 써보기 (0) | 2023.07.28 |
[Kotlin] Fragment 에서 상위 Activity Method 호출하기 (0) | 2023.07.28 |
[Kotlin] Fragment 사용하기 (0) | 2023.07.28 |
[Kotlin] Android 에서 Retrofit2 사용하여 API 호출하기 (0) | 2023.07.25 |
댓글