티스토리 뷰

반응형

Stack Overflow에 자주 검색, 등록되는 문제들과 제가 개발 중 찾아 본 문제들 중에서 나중에도 찾아 볼 것 같은 문제들을 정리하고 있습니다.

Stack Overflow에서 가장 먼저 확인하게 되는 가장 높은 점수를 받은 Solution과 현 시점에 도움이 될 수 있는 가장 최근에 업데이트(최소 점수 확보)된 Solution을 각각 정리하였습니다.

 

아래 word cloud를 통해 이번 포스팅의 주요 키워드를 미리 확인하세요.

Clicking the back button twice to exit an activity

액티비티를 종료하려면 뒤로 가기 버튼 두 번 클릭

 문제 내용 

I've noticed this pattern in a lot of Android apps and games recently: when clicking the back button to "exit" the application, a Toast comes up with a message similar to "Please click BACK again to exit".

액티비티에서 백 버튼을 두 번 클릭하여 종료하는 패턴을 최근 안드로이드 앱과 게임에서 자주 볼 수 있습니다. 이 때 "애플리케이션을 종료하려면 다시 BACK을 클릭하십시오"와 같은 메시지가 토스트로 표시됩니다.

 

I was wondering, as I'm seeing it more and more often, is that a built-in feature that you can somehow access in an activity? I've looked at the source code of many classes but I can't seem to find anything about that.

이제 더 자주 보이는데, 어떤 내장 기능을 사용하여 액티비티에서 액세스할 수 있는 것인지 궁금합니다. 여러 클래스의 소스 코드를 살펴보았지만, 아무것도 찾을 수 없습니다.

 

Of course, I can think about a few ways to achieve the same functionality quite easily (the easiest is probably to keep a boolean in the activity that indicates whether the user already clicked once...) but I was wondering if there's something already here.

액티비티에 이미 클릭한 횟수를 나타내는 불리언 변수를 유지하는 방법과 같은 몇 가지 방법을 간단히 생각해 볼 수 있지만, 기본적으로 지원되는 기능이 있는지 궁금합니다.

 

EDIT: As @LAS_VEGAS mentioned, I didn't really mean "exit" in the traditional meaning. (i.e. terminated) I meant "going back to whatever was open before the application start activity was launched", if that makes sense :)

편집: @LAS_VEGAS님이 언급했듯이, 제가 원래 의미하는 것은 "종료"가 아니라 "어플리케이션 시작 액티비티가 시작된 후에 열려있던 것으로 돌아가는 것"입니다.

 

 

 

 높은 점수를 받은 Solution 

In Java Activity:

boolean doubleBackToExitPressedOnce = false;

@Override
public void onBackPressed() {
    if (doubleBackToExitPressedOnce) {
        super.onBackPressed();
        return;
    }
        
    this.doubleBackToExitPressedOnce = true;
    Toast.makeText(this, "Please click BACK again to exit", Toast.LENGTH_SHORT).show();
        
    new Handler(Looper.getMainLooper()).postDelayed(new Runnable() {
        
        @Override
        public void run() {
            doubleBackToExitPressedOnce=false;                       
        }
    }, 2000);
} 

 

In Kotlin Activity:

private var doubleBackToExitPressedOnce = false
override fun onBackPressed() {
        if (doubleBackToExitPressedOnce) {
            super.onBackPressed()
            return
        }

        this.doubleBackToExitPressedOnce = true
        Toast.makeText(this, "Please click BACK again to exit", Toast.LENGTH_SHORT).show()

        Handler(Looper.getMainLooper()).postDelayed(Runnable { doubleBackToExitPressedOnce = false }, 2000)
    }

 

I Think this handler helps to reset the variable after 2 second.

이 핸들러는 2초 후에 변수를 재설정하는 데 도움이 될 것 같습니다.

 

 

 

 가장 최근 달린 Solution 

I think this is what you need, I mean when we want to show this toast, when there is only one activity in the stack and user pressing back from this last activity of the stack.

이것이 당신이 필요한 것이라고 생각합니다. 즉, 스택에 하나의 액티비티만 있고 사용자가 이 마지막 액티비티에서 백 버튼을 누르는 경우에만 이 토스트를 보여줍니다.
var exitOpened=false // Declare it globaly

 

and in onBackPressed method change it like:

onBackPressed 메서드에서 다음과 같이 변경하면 됩니다:
override fun onBackPressed() {
        if (isTaskRoot && !exitOpened)
        {
            exitOpened=true
            toast("Please press back again to exit")
            return
        }
        super.onBackPressed()
    }

 

Here, isTaskRoot will return true if the current activity is the root activity(first activity) of the stack and false if it is not.

여기서 isTaskRoot는 스택의 루트 액티비티(첫 번째 액티비티)인 경우 true를 반환하고 그렇지 않은 경우 false를 반환합니다.

 

You can check the official documentation here

공식 문서는 여기에서 확인할 수 있습니다

 

 

 

출처 : https://stackoverflow.com/questions/8430805/clicking-the-back-button-twice-to-exit-an-activity

반응형
댓글
공지사항
최근에 올라온 글