Kotlin/TIL

TIL (04.12)

내손은개발 🐾 2024. 4. 12. 21:44

CodeKata


 

 

[프로그래머스_Kotlin] 괄호 회전하기

프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 clas

rlawog.tistory.com

 

 

 

Android


오늘 알게된 내용

트러블 슈팅이라하기엔 내가 몰라서 발생한 내용이여서 간단히 정리하였다.

 

배경

Activity위에 2개의 Fragment를 띄워 사용 중 발생

 

문제

MainFragment에서 작성한 기기의 뒤로가기 버튼을 누르면 AlertDialog로 정말로 종료할건지 뜨게 만들었는데 DetailFragment에서도 적용이 되었다.

(당연히 DetailFragment에 AlertDialog 코드 없습니다.)

 

원인

일반적으로 Fragment에서 기기의 뒤로가기 버튼을 누르면 해당 Fragment가 스택이 제거되고 이전 Fragment가 표시되지만 뒤로가기 버튼을 누르는 것은 Activity의 동작이다.

그러므로 뒤로가기 버튼을 누르면 Activity의 onBackPressed 메서드가 호출된다.

 

해결

튜터님의 도움으로 해결했다. 해결 방법은 대충 알고 있었지만 문제의 원인이 정확하지 않았다. 설마 같은 Activity위에여서?라고만 생각했는데 대충 정답이었다.

 

해당 Fragment이면.으로 조건문을 만들어서 사용해야한다.

MainFragment의 AlertDialog 뜨는 부분에서 해결할 수 있지만 간단히 DetailFragment에서 해당 Fragment에서 뒤로가기를 누르면 그냥 다시 MainActivity로 돌아가게 만들었다.

 

이미 돌아가는 버튼을 위해 만든 코드를 사용하였다.

//DetailFragment
private fun goBack() {
	requireActivity().supportFragmentManager.popBackStack()
}

 

간단히 해결

//DetailFragment
requireActivity().onBackPressedDispatcher.addCallback(viewLifecycleOwner) {
	goBack()
}
  • requireActivity() : 현재 Fragment가 속한 Activity에 대한 참조를 제공
  • onBackPressedDispatcher : Activity의 onBackPressedDispatcher를 반환한다. 이 디스패처는 뒤로가기 버튼 이벤트를 처리하는 데 사용된다.
  • addCallback(viewLifecycleOwner) : 이 메서드는 Fragment의 생명주기를 따르는 뒤로가기 버튼 이벤트를 처리하는 콜백을 추가한다. viewLifecyclerOwner를 전달하여 Fragment의 뷰 라이프사이클을 따르도록 설정한다.

 

 

 

 

 

 

 

 

 

 

 

 

 

'Kotlin > TIL' 카테고리의 다른 글

TIL (04.16)  (0) 2024.04.16
TIL (04.15)  (0) 2024.04.15
TIL (04.09)  (0) 2024.04.09
TIL (04.08)  (0) 2024.04.08
TIL (04.05)  (0) 2024.04.05