안드로이드 스튜디오 뒤로가기 만들기(with Kotlin)

Purang·2022년 11월 26일
0

Android Studio

목록 보기
22/28

뒤로가기 만드는 방법을 공부해보았습니다.

첫 번째 방법


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

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

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


공부 한 곳
두 번 눌러 앱 종료
액티비티에서 뒤로가기
프래그먼트에서 뒤로가기1
프래그먼트 뒤로가기2

profile
몰입의 즐거움

0개의 댓글