프래그먼트에서 프래그먼트로 뒤로 가야하는 걸 구현해야했다.
뷰페이저에서는 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 면 된다는 걸 알기 바란다.
'개발' 카테고리의 다른 글
[안드로이드/코틀린] 테마 적용 오류 (0) | 2024.02.20 |
---|---|
[코틀린] context 뜻? 활용 복습 (0) | 2024.02.16 |
유튜브 api 등록하는 방법 (0) | 2024.02.14 |
[안드로이드/코틀린] 유튜브 api 사용해보기 (0) | 2024.02.13 |
java.lang.NullpointerException: Parameter specified as non-null is null: method [클래스 경로].<init>, parameter [파라미터명] (0) | 2024.02.08 |
댓글