일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- LV1
- LIS
- dp
- 임시저장하기
- RETROFIT
- RecyclerView
- 녹음기
- 테마변경
- recyclerView 클릭이벤트
- Alert Dialog
- Top-Down
- bronze4
- stack
- 다크모드제한
- Kotlin
- 뷰클래스
- toLong()
- silver3
- naver open api
- bronze3
- bronze2
- silver4
- fragment에서 context사용
- bottom-up
- 백준
- map
- Android
- Silver5
- gradle설정
- 프로그래머스
Archives
- Today
- Total
유니 코드
[Android] 뒤로가기 버튼 설정(Kotlin) 본문
* 뒤로가기 버튼은 내가 만든 버튼, 안드로이드 뒤로가기 버튼 모두 해당한다
뒤로가기 누르면 이동할 액티비티 설정
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() - 현재 구동중인 쓰레드 종료시 액티비티 종료
'오늘의 공부는?! > Android' 카테고리의 다른 글
Comments