Android导航组件-OnNavigateUpListener
我想在Android导航控制器从特定片段向上导航时附加一个回调(Android导航组件-OnNavigateUpListener,android,android-architecture-navigation,onbackpressed,navigationcontroller,up-navigation,Android,Android Architecture Navigation,Onbackpressed,Navigationcontroller,Up Navigation,我想在Android导航控制器从特定片段向上导航时附加一个回调(findNavController().navigateUp())。如何实现此功能 我已经听说过requireActivity().on backpressedDispatcher.addCallback(此)。这只监听系统的后退按钮,而不监听工具栏上的后退箭头。我想听听这样一个事件:用户在包含NavHostFragment的MainActivity中按下左上角工具栏上的后退箭头,您可以将onDestinationChanged添加
findNavController().navigateUp()
)。如何实现此功能
我已经听说过
requireActivity().on backpressedDispatcher.addCallback(此)
。这只监听系统的后退按钮,而不监听工具栏上的后退箭头。我想听听这样一个事件:用户在包含NavHostFragment
的MainActivity
中按下左上角工具栏上的后退箭头,您可以将onDestinationChanged
添加到NavController
侦听器中
navController = findNavController(MainActivity.this, R.id.navHostFragment);
navController.addOnDestinationChangedListener(this);
@Override
public void onDestinationChanged(@NonNull NavController controller, @NonNull NavDestination destination, @Nullable Bundle arguments) {
int destinationId = destination.getId();
if (destinationId == R.id.YOUR_DESIRED_FRAGMENT_ID) // your own behavior...
}
然后,您可以添加您想要的任何行为
我希望这能有所帮助。我已经设法找到了解决办法。以下是我的MainActivity的onCreate()的外观:
val navController = findNavController(R.id.nav_host_fragment)
val appBarConfiguration = AppBarConfiguration(navController.graph)
my_toolbar.setupWithNavController(navController, appBarConfiguration)
// The code below solved it for me. It overrides the toolbar back and then calls the OS back which is overridden in my fragment.
my_toolbar.setNavigationOnClickListener {
onBackPressed()
}
在我的片段中,我在onActivityCreated()中这样做
现在,我可以在单个处理程序中覆盖工具栏后退按钮和操作系统后退按钮。如何知道上一个目标是什么?我希望它只发生在一个特定片段到另一个特定片段之间。然后我相信你可以将你想要的行为添加到这个特定片段
onPause()
或onDestroy()
。你找到解决这个问题的方法了吗?我也面临同样的问题。使用Android导航控制器时,OnBackPressedDispatcher仅覆盖操作系统/系统后退按钮,而不覆盖工具栏。
requireActivity().onBackPressedDispatcher.addCallback(this) {
// override custom back
}