4

我想在 Android 导航控制器从特定片段 ( findNavController().navigateUp()) 向上导航时附加一个回调。我怎样才能实现这个功能?

我已经听说过requireActivity().onBackPressedDispatcher.addCallback(this)。这只会听系统的后退按钮而不是工具栏上的后退箭头。我想听听用户按下左上角工具栏上的后退箭头的事件。

4

2 回答 2

3

我设法找到了解决方案。这是我的 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() 中执行此操作

requireActivity().onBackPressedDispatcher.addCallback(this) {
    // override custom back
}

现在我可以在一个处理程序中同时覆盖工具栏后退按钮和操作系统后退按钮。

于 2019-12-31T12:19:39.503 回答
0

在您MainActivity包含的内容中,NavHostFragment您可以添加onDestinationChangedNavController侦听器

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...
}

然后,您可以添加任何您想要的行为。

我希望这会有所帮助。

于 2019-08-28T13:34:52.970 回答