안드로이드 심화팀과제 pt2

황일규·2023년 9월 27일
0

첫 번째 방법

첫 번째는 기본적으로 위 사진과 같이 안드로이드에 존재하는 뒤로가기 버튼을 사용해서 뒤로가기를 구현해 보겠습니다.

우선 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초이내 뒤로가기 입력 시 앱이 종료되도록 하였습니다.

위와 같은 방식을 통해 여러 뒤로가기 하는 방법을 공부해보았습니다.

profile
Never give up

0개의 댓글

관련 채용 정보