要在Android Jetpack导航组件中禁用滚动位置,可以使用FragmentNavigator类的onCreateDestination方法。以下是一个示例代码:
class DisableScrollFragmentNavigator(
context: Context,
manager: FragmentManager,
containerId: Int
) : FragmentNavigator(context, manager, containerId) {
override fun onCreateDestination(): NavDestination? {
val destination = super.onCreateDestination()
destination?.let {
it.addDeepLink(it.id.toString())
}
return destination
}
}
然后,在导航图中使用此自定义FragmentNavigator类。示例如下:
然后,在Activity中设置自定义的FragmentNavigator类:
class MainActivity : AppCompatActivity() {
lateinit var navController: NavController
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val navHostFragment = supportFragmentManager.findFragmentById(R.id.nav_host_fragment) as NavHostFragment
navController = navHostFragment.navController
val disableScrollNavigator = DisableScrollFragmentNavigator(this, navHostFragment.childFragmentManager, R.id.nav_host_fragment)
navController.navigatorProvider.addNavigator(disableScrollNavigator)
val navGraph = navController.navInflater.inflate(R.navigation.nav_graph)
navController.graph = navGraph
// ...
}
}
这样就可以在Android Jetpack导航组件中禁用滚动位置了。