탐색 구성요소는 프로그래밍 방식으로 생성되어 특정 탐색 요소와 상호작용하는 수단을 제공합니다.
NavHostFragment 만들기
NavHostFragment.create()
를 사용하여 특정 그래프 리소스와 함께 NavHostFragment
를 프로그래밍 방식으로 생성할 수 있습니다.
Kotlin
val finalHost = NavHostFragment.create(R.navigation.example_graph) supportFragmentManager.beginTransaction() .replace(R.id.nav_host, finalHost) .setPrimaryNavigationFragment(finalHost) // this is the equivalent to app:defaultNavHost="true" .commit()
Java
NavHostFragment finalHost = NavHostFragment.create(R.navigation.example_graph); getSupportFragmentManager().beginTransaction() .replace(R.id.nav_host, finalHost) .setPrimaryNavigationFragment(finalHost) // this is the equivalent to app:defaultNavHost="true" .commit();
setPrimaryNavigationFragment(finalHost)
는 NavHost
가 시스템의 뒤로 버튼 눌림을 가로챌 수 있게 합니다. 또한 app:defaultNavHost="true"
를 추가하면 NavHost
XML에서 이 동작을 구현할 수 있습니다. 맞춤형 뒤로 버튼 동작을 구현하면서 NavHost
가 뒤로 버튼 눌림을 가로채지 않게 하려면 null
을 setPrimaryNavigationFragment()
에 전달합니다.
ViewModel로 대상 간 UI 관련 데이터 공유
2.1.0-alpha02 버전부터 탐색 그래프로 범위가 지정된 ViewModel
을 생성하고 그래프 대상 간에 UI 관련 데이터를 공유할 수 있습니다. 이 방식으로 생성된 모든 ViewModel
객체는 연결된 NavHost
와 ViewModelStore
가 삭제되거나 탐색 그래프가 백 스택에서 소멸되기 전까지 유지됩니다.
다음 예시는 탐색 그래프로 범위가 지정된 ViewModel
을 검색하는 방법을 보여줍니다.
Kotlin
Kotlin에서 navGraphViewModels()
속성 위임을 사용하여 프래그먼트 대상 내에서 ViewModel
을 검색할 수 있습니다.
val factory: ViewModelProviderFactory = ... val viewModel: MyViewModel by navGraphViewModels(R.id.my_graph) { factory }
이 예시에서는 by navGraphViewModels()
가 findNavController()
를 자동으로 호출하여 연결된 NavController
를 검색합니다.
Java
ViewModelProviderFactory factory = ... ViewModelStoreOwner owner = navController.getViewModelStoreOwner(R.id.my_graph); MyViewModel viewModel = new ViewModelProvider(owner, factory);
ViewModel
에 대한 자세한 내용은 ViewModel 개요를 참조하세요.