뒤로가기 만드는 방법을 공부해보았습니다.
첫 번째는 기본적으로 위 사진과 같이 안드로이드에 존재하는 뒤로가기 버튼을 사용해서 뒤로가기를 구현해 보겠습니다.
우선 Activity에서 뒤로가기 구현법 입니다.
var backPressedTime : Long = 0
...
override fun onBackPressed() {
//2.5초이내에 한 번 더 뒤로가기 클릭 시
if (System.currentTimeMillis() - backPressedTime < 2500) {
super.onBackPressed()
return
}
Toast.makeText(this, "한번 더 클릭 시 홈으로 이동됩니다.", Toast.LENGTH_SHORT).show()
backPressedTime = System.currentTimeMillis()
}
위 방식을 통해 구현 시 아래와 같습니다.
마찬가지로 activity에서 뒤로가기를 구현해 보겠습니다.
아래의 사진과 같은 방식입니다.
//뒤로 가기 버튼(setDisplayHomeAsUpEnabled)을 만드는 코드
supportActionBar!!.setDisplayHomeAsUpEnabled(true)
...
override fun onOptionsItemSelected(item: MenuItem): Boolean {
when(item.itemId) {
android.R.id.home -> {
val intent = Intent().apply {
//원하는 코드 입력
}
setResult()//원하는 코드 입력
finish()
return true
}
}
return super.onOptionsItemSelected(item)
}
위와 같은 방식을 사용하였습니다. supportActionBar!!.setDisplayHomeAsUpEnabled(true)을 통해 뒤로가기 버튼을 활성화 하였으나 이 코드만 사용시 뒤로 가기는 되지 않습니다.
그러니 override fun onOptionsItemSelected을 사용하여 android.R.id.home(툴바의 뒤로가기 버튼의 id) 클릭 시 코드를 추가하여 원하는 인텐트로 이동시키는 방식을 사용하였습니다.
또 다른 간단한 방식으로는 A액티비티에서 B액티비티로 이동하고 싶을 때
supportActionBar!!.setDisplayHomeAsUpEnabled(true)를 onCreate에 작성한 다음 Manifest에서 A액티비티 코드에 android:parentActivityName = "B액티비티"를 사용해주면 곧바로 뒤로가기를 사용할 수 있습니다. 그러나 만약 B액티비티를 사용하는 Fragment로 이동하게 되면 Fragment가 replace되어 저장된 데이터가 사라질 수 있어 저는 intent 방식을 사용하게 되었습니다.
Fragment에서 사용하는 방법입니다.
Activity에서 onBackpressed 를 호출하는 Interface를 만들어 사용하는 방식은 아래 프래그먼트 뒤로가기2를 참고해 주세요.
저는 1방법을 사용하여 만들어 보았습니다.
private lateinit var callback : OnBackPressedCallback
...
override fun onAttach(context: Context) {
super.onAttach(context)
callback = object : OnBackPressedCallback(true) {
override fun handleOnBackPressed() {
if (System.currentTimeMillis() - backPressedTime < 2500) {
activity?.finish()
return
}
Toast.makeText(activity, "한 번 더 누르면 앱이 종료됩니다.",Toast.LENGTH_SHORT).show()
backPressedTime = System.currentTimeMillis()
}
}
activity?.onBackPressedDispatcher!!.addCallback(this, callback)
mainActivity = context as MainActivity
}
override fun onDetach() {
super.onDetach()
callback.remove()
}
콜백을 사용하는 방식으로 위와 마찬가지로 2.5초이내 뒤로가기 입력 시 앱이 종료되도록 하였습니다.
위와 같은 방식을 통해 여러 뒤로가기 하는 방법을 공부해보았습니다.