-
back 버튼 두 번 클릭하여 프래그먼트에서 액티비티 종료시키기Android Studio 2023. 7. 10. 22:56728x90
자료출처 : https://developer.android.com/guide/navigation/navigation-custom-back?hl=ko
상황 전제
1. 안드로이드 버전 12 이상 (onBackPressed -> 사용할 수는 있으나, deprecation 된 상태)
2. 액티비티2가 실행되고나서 Back 버튼을 눌러도 액티비티1로 돌아가지 않게 하고 싶을 때
액티비티1이 관리하는 프래그먼트에서 액티비티2 호출하며, 액티비티1 Intent.flag를 사용하여 액티비티 새로운 테스크 를 사용 혹은 현재 액티비티 백스택을 클리어 (공부중이라 정확한 의미가 아닐수도..?)
찝찝하다면 or 대신 and를 작성하여 새로 생성한 다음 혹시 모를게 남아 있을 수 있으니 클리어까지...fragmentLoginBinding = FragmentLoginBinding.inflate(inflater) mainActivity = activity as MainActivity fragmentLoginBinding.run{ editTextLoginPassword.run{ setOnEditorActionListener { v, actionId, event -> mainActivity.removeFragment(MainActivity.LOGINFRAGMENT) val intent = Intent(mainActivity, MainActivity2::class.java) intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK startActivity(intent) false } } }
프래그먼트에서 쓰레드를 이용하여 상태값을 변경시키고 3초 내 백 버튼을 누르는 이벤트가 2번 발생하면 해당 액티비티를 Compat에서 지원하는 메서드를 이용하여 액티비티2 종료 -> 액티비티1 종료된 상태이기에 어플리케이션 종료.
mainActivity2 = activity as MainActivity2 var shoutDownCheck = false requireActivity().onBackPressedDispatcher.addCallback(object : OnBackPressedCallback(true) { override fun handleOnBackPressed() { // 뒤로가기 눌렀을 때 동작할 코드 if(shoutDownCheck){ ActivityCompat.finishAffinity(mainActivity2) } else { shoutDownCheck = true Toast.makeText(requireActivity(),"종료하시려면 한번 더 눌러주세요", Toast.LENGTH_SHORT).show() thread { SystemClock.sleep(3000) shoutDownCheck = false } } } })
requireActivity() : 현재 프래그먼트를 관리하는 액티비티를 의미합니다.
상기 코드 내에서는 mainActivity2로 작성하여도 무관합니다.
'Android Studio' 카테고리의 다른 글
AVD Error while waiting for device 해결법 (1) 2023.12.18 안드로이드 스튜디오 Retrofit (0) 2023.08.10 FireBase RealTime Database셋팅 및 기초 사용법 (0) 2023.08.03 안드로이드 스튜디오 WorkManager (0) 2023.07.26 안드로이드 스튜디오 JSON 사용하기 (0) 2023.07.20