安卓导航组件 - OnNavigateUpListener

4
我希望在 Android 导航控制器从特定片段导航回上层视图(findNavController().navigateUp())时附加一个回调。如何实现这个功能?
我已经了解到requireActivity().onBackPressedDispatcher.addCallback(this)。但是它只监听系统后退按钮,而不是工具栏上的返回箭头。我想监听用户在左上角的工具栏中按下返回箭头的事件。请问该怎么做?

你有解决这个问题吗?我也遇到了同样的问题。当使用Android导航控制器时,OnBackPressedDispatcher仅覆盖操作系统/系统返回按钮,而不是工具栏。 - Bilal Soomro
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
}

现在我可以在单个处理程序中覆盖工具栏返回按钮和操作系统返回按钮。


0
在包含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...
}

然后您可以添加任何所需的行为。

希望这有所帮助。


我怎么知道上一个目的地是什么?我希望它只从一个特定的片段到另一个特定的片段发生。 - Adifyr
那么我相信你可以在特定的代码片段onPause()onDestroy()中添加所需的行为。 - Ahmed Fathy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接