프로젝트 [자문자답 앱] - 뒤로 버튼을 빠르게 두 번 눌렀을 때 액티비티 종료

유의선·2024년 2월 22일
0

문제 만들기 화면에서 실수로 뒤로 버튼을 눌러 만들던 문제 내용이 날라가버린 적이 종종 있었다.

이 문제를 해결하기위해 뒤로 버튼을 빠르게 두 번 눌렀을 때만 액티비티를 종료하도록 만들었다.


문제를 만드는 화면의 코드인 MakeActivity.java에 뒤로 가기 버튼이 눌렸을 때의 시간을 저장하는 backpressedTime 변수를 선언하였다.

public class MakeActivity extends AppCompatActivity {

	...
    
    private long backpressedTime;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_make);
        
        ...

        backpressedTime = 0;

그 후 뒤로 버튼이 눌렸을 때 호출되는 함수인 onBackPressed()를 재정의하였다.

    @Override
    public void onBackPressed() {

        if (System.currentTimeMillis() > backpressedTime + 2000) {
            backpressedTime = System.currentTimeMillis();
            Toast.makeText(this, "\'뒤로\' 버튼을 한번 더 누르면 종료합니다.", Toast.LENGTH_SHORT).show();
        } else if (System.currentTimeMillis() <= backpressedTime + 2000) {
            finish();
        }

    }

System.currentTimeMillis로 현재 시간을 받아 backpressedTime에 2초를 더한 시간과 비교한다.

처음 상태에선 backpressedTime에는 0이 저장되어 있으므로 당연히 현재 시간 쪽이 크다.
그 때는 backpressedTime에 지금 시간을 저장하고 Toast 메시지를 띄운다.

이제 다음부터 뒤로 버튼이 눌렸을 때는 현재 시간과 (뒤로 버튼이 눌렸을 때의 시간 + 2초)를 비교하게 된다.

만약 2초안에 뒤로 버튼을 두 번 눌러 현재 시간이 (뒤로 버튼이 눌렸을 때의 시간 + 2초)보다 작아졌다면 그 때 액티비티를 종료시킨다.

0개의 댓글