minjeong-oh
기록
minjeong-oh
전체 방문자
오늘
어제
  • 분류 전체보기 (207)
    • ML & Neural Net (3)
    • ◼️GNN (1)
    • ◼️시계열 (1)
    • ◼️추천시스템 (0)
    • ◼️수학 (3)
    • Data Engineer (2)
    • ◼️Spark (1)
    • ◼️Kafka (1)
    • ◼️Elestic Search (0)
    • ◼️Redis (0)
    • ◼️ClickHouse (1)
    • Programming Language (4)
    • ◼️SQL (0)
    • ◼️React (0)
    • ◼️Git (1)
    • ◼️Python (1)
    • ◼️C++ (33)
    • ◼️Fortran 99 (2)
    • ◼️OpenGL (7)
    • ◼️MFC (35)
    • ◼️Flutter (46)
    • ◼️Kotlin (1)
    • ◼️Android (1)
    • ◼️Java (1)
    • ◼️C (4)
    • Development (0)
    • ◼️디자인패턴 (0)
    • ◼️네트워크 (2)
    • ◼️인증 (1)
    • Computer Science (4)
    • 알고리즘 문제풀이 (12)
    • SQL 고득점 Kit 문제풀이 (8)
    • 취업준비 (0)
    • Notion 정리 글 (1)
    • Article Scrap (12)
      • Careerly - Q&A (7)
      • Careerly - Post (2)
    • 기타 등등 (16)

블로그 메뉴

  • 글쓰기
  • 홈
  • 태그
  • 방명록
  • 편집

공지사항

인기 글

태그

  • 구조체배열포인터
  • 그램풀스팩업그레이드
  • 구조체매개변수
  • AI배워야하나
  • 리눅스파티션
  • hello테마
  • 티스토리폰트배경색없애기
  • 19년식그램램장착
  • kafka구축
  • NextJSSwagger
  • mfc
  • GSLB
  • 이차원구조체배열포인터
  • API문서정리
  • 19년식그램SSD장착
  • OpenGL회전
  • SpringBootSwagger
  • 그램업그레이드
  • 인공지능개발자
  • 이것이C++이다책참고

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
minjeong-oh

기록

◼️Kotlin

[Kotlin] Activity, Fragment 뒤로가기 이벤트

2023. 10. 21. 22:57

기본적으로 뒤로가기 이벤트는 Activity에 발생한다.

Fragment가 뒤로가기 이벤트를 받기위해서는 이 이벤트를 가로채기위해 콜백 함수를 등록해줘야한다.

 

class MyFragment:Fragment(){
    lateinit var callback: OnBackPressedCallback
...
    override fun onAttach(context: Context) {
        super.onAttach(context)
        setBackEvent()
    }

    private fun setBackEvent(){
        callback = object : OnBackPressedCallback(true) {
            override fun handleOnBackPressed() {
                //Fragment에서 Back했을 때 실행할 코드
                callback.remove()  //fragment에 back잡히는 것 해제

            }
        }

        //뒤로가기 콜백 등록 코드. Fragment에 back 잡히도록 하기
        requireActivity().onBackPressedDispatcher.addCallback(
            this,
            callback
        )
    }
...
}

 

Activity에서 발생하는 back 이벤트의 기능을 재정의하고 싶을 경우

class MainActivity:AppCompatActivity(){
...
    private val backcallback = object : OnBackPressedCallback(true) {
        override fun handleOnBackPressed() {
            //사용자 정의 back 이벤트
            
            systemBackEvent()
        }
    }
    
    private fun systemBackEvent(){
        //callback을 해지.
        backcallback.remove()
        
        // 시스템자체 back 실행. (위코드처럼 해지하지 않았을 경우에는 사용자정의 callback이 호출됨)
        this.onBackPressedDispatcher.onBackPressed()
    }
    
    override fun onStart() {
        super.onStart()

        //callback을 onStart에 등록해줘야됨.
        //시스템 뒤로가기를 사용했을 때, callback이 해지상태로 어플이 onPause되어있는데
        //다시 어플을 띄우면 onCreate를 거치지 않고 바로 onStart되기 때문에
        //callback이 등록되지 않아서 majorFragment 에서 시스템 뒤로가기를하면 어플이 닫혀버림
        this.onBackPressedDispatcher.addCallback(this, backcallback)
    }
... 
}

    티스토리툴바