탐색 구성요소와 프로그래밍 방식으로 상호작용

탐색 구성요소는 프로그래밍 방식으로 생성되어 특정 탐색 요소와 상호작용하는 수단을 제공합니다.

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가 뒤로 버튼 눌림을 가로채지 않게 하려면 nullsetPrimaryNavigationFragment()에 전달합니다.

ViewModel로 대상 간 UI 관련 데이터 공유

2.1.0-alpha02 버전부터 탐색 그래프로 범위가 지정된 ViewModel을 생성하고 그래프 대상 간에 UI 관련 데이터를 공유할 수 있습니다. 이 방식으로 생성된 모든 ViewModel 객체는 연결된 NavHostViewModelStore가 삭제되거나 탐색 그래프가 백 스택에서 소멸되기 전까지 유지됩니다.

다음 예시는 탐색 그래프로 범위가 지정된 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 개요를 참조하세요.