본문 바로가기
개발

[안드로이드/코틀린] 프래그먼트에서 뒤로 가기 구현하기

by kks950115 2024. 2. 15.
728x90

프래그먼트에서 프래그먼트로 뒤로 가야하는 걸 구현해야했다. 

뷰페이저에서는 onbackpressed를 쓰면 되지만 우리가 했던 프로젝트는 뷰페이저를 쓰지 않았었다.

 

우선 메인액티비티 안에 a프래그먼트가 있고, a 프래그먼트에서 b액티비티로 화면을 전환한다.

여기서 b액티비티에서 뒤로가기 버튼을 누르면 a프래그먼트로 전환되게 만들어야 했다.

 

구글에 프래그먼트 뒤로 가기를 검색하고 gpt한테도 물어봤지만 마땅한 답을 찾을 수가 없었다.

튜터님한테 물어봐서 답을 찾을 수 있었다.

 

 binding.ivBack.setOnClickListener {
    requireActivity().supportFragmentManager.popBackStack()
}

 

이 코드를 b액티비티에 oncraate() 안에 넣으니 a프래그먼트로 이동했다.

 

requireActicity() :  액티비티를 반환한다.

supportFragmentManager :  그리고 프래그먼트를 관리하는 함수가 있는 객체를 부르고.

popBackStack() : pop은 가장 최근 꺼를 반환하고 삭제한다. stack은 후입선출이고 쌓인다는 특징을 가졌다. 근데 back이 붙었으니 스택이 반대로 간다는 뜻이다.  즉 쌓았던 걸 pop(가장 최근에 넣었던걸 꺼내고 삭제) 한다는 뜻.

 

액티비티에서 스택에 쌓여있는 페이지를 반환한하고 그 페이지는 삭제한다는 뜻이다.

 

위 코드는 따로 만든 버튼을 눌렀을 때 작동하는거고, 휴대폰의 뒤로 가기 버튼도 재정의할 수 있다. 내가 구글에서 찾았던 자료들은 대부분 휴대폰의 뒤로 가기를 재정의한 것이였다....

 

 

//이 코드는 에뮬레이터에서 핸드론의 뒤로 가기 버튼을 재정의하는 것이다.
   requireActivity().onBackPressedDispatcher.addCallback(viewLifecycleOwner, object : OnBackPressedCallback(true) {
            override fun handleOnBackPressed() {
              
                requireActivity().supportFragmentManager.popBackStack() // 현재 액티비티의 뒤로가기 버튼 이벤트 호출

            }
        })

 

위 코드는 휴대폰의 뒤로 가기 버튼을 재정의 한 것이다.

그래서 안됐던 것이다... 뒤로 가기 버튼이라 검색해서 진짜 휴대폰의 뒤로 가기 버튼 결과를 알려준 것이였다....

내게 필요했던 건 화면상의 버튼이였는데 ㅠ

혹 나와 비슷한 걸 구현하는 사람이라면, 그리고 이 글을 본다면 화면상의 뒤로가기 버튼은 onclicklistener 면 된다는 걸 알기 바란다.

728x90
반응형

댓글