Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android导航组件-OnNavigateUpListener_Android_Android Architecture Navigation_Onbackpressed_Navigationcontroller_Up Navigation - Fatal编程技术网

Android导航组件-OnNavigateUpListener

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添加

我想在Android导航控制器从特定片段向上导航时附加一个回调(
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
}