-
[ANDROID] Navigation Back PressedANDROID/NAVIGATION COMPONENT 2021. 11. 21. 17:38
맞춤 뒤로 탐색 기능 제공 | Android 개발자 | Android Developers
맞춤 뒤로 탐색 기능 제공 뒤로 탐색 기능은 사용자가 이전에 방문한 화면 기록을 통해 뒤로 이동하는 기능입니다. 모든 Android 기기는 이 유형의 탐색을 위해 뒤로 버튼을 제공하므로 앱 UI에 뒤
developer.android.com
Fragment자체는 BackPressed 메소드를 지원하지 않기 때문에 프레그먼트에서 뒤로가기를 사용하려면 BackPressedDispatcher를 사용해야합니다.
Fragment가 열려있는 채로 뒤로가기를 누른다면 Activity에 Callback을 보내 BackPressed 요청을 처리합니다.
BaseActivity 내부의 onBackPressed 메소드입니다.
override fun onBackPressed() { // 액티비티 내의 프레그먼트에서 BackPressedCallback 이 넘어온다면, Callback 요청만 수행합니다. if(onBackPressedDispatcher.hasEnabledCallbacks()){ onBackPressedDispatcher.onBackPressed() return } // Callback 요청이 아니고 navController 에 BackStack 이 쌓여있지 않다면 액티비티를 종료합니다. if(_navController?.popBackStack() == false) { finish() return } super.onBackPressed() }이제는 Fragment에서 Callback을 요청할 수 있게 해야됩니다.
abstract class BaseFragment<>( ) : Fragment() { // Callback 객체를 만들어 줍니다. private val backPressedCallback = object : OnBackPressedCallback(false) { override fun handleOnBackPressed() { // 리스너 onBackPressed() } } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) // Callback 객체를 상위 액티비트의 디스패쳐에 등록 requireActivity().onBackPressedDispatcher.addCallback(viewLifecycleOwner, backPressedCallback) } // navController에 백스택이 있다면 뒤로가기. open fun onBackPressed() { navController.popBackStack() } }OnBackPressedCallback의 Constructor는 초기 사용 설정 상태를 나타내는 Boolean 값을 사용합니다. 콜백이 사용 설정된 때만(즉, isEnabled()가 true를 반환) 디스패처가 콜백의 handleOnBackPressed()를 호출하여 뒤로 버튼 이벤트를 처리합니다.