제이슨의 개발이야기

[안드로이드 코틀린] 뒤로가기 버튼 막기 AND 뒤로가기버튼 2번입력하면 앱 종료 (Activity , Fragment) 본문

안드로이드

[안드로이드 코틀린] 뒤로가기 버튼 막기 AND 뒤로가기버튼 2번입력하면 앱 종료 (Activity , Fragment)

제이쓰은 2021. 4. 14. 14:33
728x90
반응형

오늘은 뒤로가기 버튼을 막는 방법과 뒤로가기 버튼을 2번 연속으로 누르면 앱이 종료하는 방법에 대해 공부해보고자 합니다 ! 

 

먼저 뒤로가기 버튼 막는 방법은 엄청 간단합니다! 

 

Activity 기준

 

onBackPressed 에서 super.onBackPressed() 부분을 주석 처리 하면 뒤로가기 버튼이 막힙니다 ! 

 

그러면 두번 클릭 했을떄 종료하는 방법은 무엇일까요?

 

한번 눌렀을때 시간을 기억 하고 있다가 또 한번 눌렀을때 비교해서 짧은 시간에 눌렀을 경우 finishAffinity() 을 통해 종료시킬수 있습니다!

 

제가 처음 공부할때 구글링에 검색해 보면 블로그 대부분 그냥 finish() 만으로 종료시킵니다 그러나 finish() 같은 경우 스택에 이전 view들이 존재 할 경우 앱 종료가 아니라 그 이전 view 가 나오기 때문에 finishAffinity() 를 할 경우 스택에 다른 view가 있다 하더라도 어느 경우에나 앱이 종료할 수 있습니다 ! 

 

지금까지는 Activity 기준으로 공부했고 Fragment에서는 어떻게 해야 할까요? 

 

아쉽게도 Activity 처럼 Fragment 내에 뒤로가기 동작 함수는 존재하지 않습니다 ㅠㅠ 

그래서 인터페이스를 만들고 Activity 에서 onbackPressed() 부분을 오버라이딩 하고 Fragment에 아까 만든 인터페이스를 implements 해야합니다 

 

인터페이스를 위에 이미지 처럼 만들구 나서 Fragment가 해당 인터페이스를 implements 해줍니다

if(this is FirstFragment){
      activity?.finish()
}

 

이 부분은 해당 프레그먼트가 FirstFragment 일 경우 activity를 종료하라는 의미입니다 이렇게 되면 앱 전체가 종료됩니다

 

 

마지막으로 Activity 에서 onBackPressed() 부분을 재정의 해주시면 됩니다ㄷ

이렇게 하면 뒤로가기 버튼을 눌렀을때 프레그먼트에서 뒤로가기 버튼을 눌렀을때 원하는 이벤트를 발생 시킬 수 있습니다 ! 

 

Fragment 부분은 앞서 Activity 와는 다르게 버튼을 두번 눌렀을때 종료된다던가 혹은 뒤로가기 버튼을 막는 코드는 아닙니다 

 

Activity 부분의 코드를 Fragment 부분에 코드와 접목시키면 Fragment 에서도 뒤로가기 버튼을 눌렀을떄의 원하는 이밴트가 발생합니다 !

728x90
반응형