유니 코드

[Android] 뒤로가기 버튼 설정(Kotlin) 본문

오늘의 공부는?!/Android

[Android] 뒤로가기 버튼 설정(Kotlin)

꼬물쥰 2022. 7. 23. 20:59

* 뒤로가기 버튼은 내가 만든 버튼, 안드로이드 뒤로가기 버튼 모두 해당한다

 

뒤로가기 누르면 이동할 액티비티 설정

1. manifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest ...>
            ...
    <application ...>
        <activity android:name=".MainActivity">
        </activity>
        <activity android:name=".SignupActivity"
            android:parentActivityName=".LoginActivity">
        </activity>
        <activity
            android:name=".LoginActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".FindPasswordActivity"
            android:parentActivityName=".LoginActivity">
        </activity>
    </application>
</manifest>

android:parentActivityName 속성을 사용하여 뒤로 이동할 액티비티명을 지정해준다

위의 코드는 SignupActivity와 FindPasswordActivity에서 뒤로가기를 눌렀을 때 LoginActivity로 이동하도록 했다

 

2. Activity파일

각각 액티비티 파일에서 리스너를 설정해준다. 뒤로가기 버튼을 잘못 누르는 경우도 있으니

다이얼로그로 다시한번 확인 후 finish()를 해준다

    binding.btnBack.setOnClickListener {
        val builder = AlertDialog.Builder(this)
        builder.setMessage("회원가입을 취소하시겠습니까?")
            .setPositiveButton("네",
                DialogInterface.OnClickListener { _, _ ->
                    finish()
                })
            .setNegativeButton("아니요",
                DialogInterface.OnClickListener { _, _ ->
                })
        builder.show()
    }
여담이지만 원래 finish()로 액티비티를 종료하는 것이 아닌 Intent로 액티비티를 이동했었다,,
테스트하면서 Intent로 LoginActivity 이동 후 뒤로가기 버튼을 누르니 다시 해당 액티비티가 나와서
문제가 있다는 걸 알게되었다고 한다,,,,,ㅎㅎ

 

뒤로가기 두 번 누르면 어플 종료

어플 테스트하는 중 잘못해서 뒤로가기를 눌렀더니 앱이 종료가 되어서 다시 실행해야했다

이처럼 사용자의 실수로 앱이 종료될 수 있다

그래서 뒤로가기를 한 번 누르면 Toast 메세지를 띄우고,

한 번 더 누르면 앱이 종료되도록 하는 방법을 알아보자

 

1. 변수 선언

private var mBackWait: Long = 0     //뒤로가기 연속 클릭 대기시간

 

2. onBackPressed() 함수

액티비티 클래스 내에서 onBackPressed함수를 오버라이드해준다

override fun onBackPressed() {
    //뒤로가기 버튼 클릭
    if(System.currentTimeMillis() - mBackWait >= 2000){
        mBackWait = System.currentTimeMillis()
        Toast.makeText(this, "뒤로가기 버튼을 한번 더 누르면 종료됩니다.", Toast.LENGTH_SHORT).show()
    } else{
        finish()    //액티비티 종료
    }
}

뒤로 가기 버튼이 한 번 눌렸을 때 mBackWait변수는 0이니까 mBackWait 변수에 시간을 넣어준 후 

2초내에 다시 뒤로가기 버튼이 눌리면 그때는 액티비티 종료

 

 

액티비티 종료하는 방법

finish() - 안드로이드 내의 액티비티 하나만 종료

finishAffinity() - 하나의 액티비티가 아닌 모든 액티비티 종료(해당 애플리케이션의 루트 액티비티 종료)

runFinalization() - 현재 구동중인 쓰레드 종료시 액티비티 종료

Comments