본문 바로가기
Android

[Kotlin] Activity 에서 Fragment 변경하기

by bryan.oh 2023. 7. 28.
반응형

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 의 코드 스타일을 권장합니다. 이유는 디버깅할 때 오류나는 라인을 찾기 쉽기 때문입니다.

상위 Activity의 layout : FragmentContainerView 위치.

 

그리고 앱을 실행해서 확인해봅니다.

버튼을 누를 때 마다, 서로 바뀌는것을 확인할 수 있습니다.

 


 

다음은 Navigation 을 사용해서 Fragment 를 바꿔보는 것을 해보겠습니다.

 

 

728x90
반응형

댓글