我试图在退出当前片段/活动之前拦截Android应用程序上的向后导航以运行一些代码。
该应用程序正在使用Android导航组件,该组件已连接到底部导航栏和工具栏。堆栈不为空时,工具栏将显示“后退”按钮。
我想要实现的是在退出片段之前显示一个自定义对话框,询问用户是否要保存数据。我的片段包含一些EditText字段和一个保存按钮,应按一下以将数据保存到存储库。如果用户不这样做,则返回时应显示弹出窗口。
我设法使用“ OnBackPressedCallback”拦截了android后退按钮,但工具栏的后退按钮仍将关闭片段。
有什么方法可以拦截这两种方法(从工具栏按钮返回,并使用android后退按钮)?
谢谢
答案 0 :(得分:1)
您是否尝试过在工具栏上使用导航侦听器?
您必须分别处理这两种情况,这种情况没有单一方法。
答案 1 :(得分:1)
您可以查看 NavigationUI.setupWithNavController( toolbar, navController, appBarConfiguration ) 的代码,它向您展示了如何为工具栏实现向上导航。
这是我的解决方案:
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
// default toolbar setup with navigation components
final NavController navController = Navigation.findNavController( view );
final AppBarConfiguration appBarConfiguration = new AppBarConfiguration.Builder( navController.getGraph() ).build();
NavigationUI.setupWithNavController( toolbar, navController, appBarConfiguration );
// own changes like icon and dialog
toolbar.setNavigationIcon( R.drawable.ic_close_24 );
toolbar.setNavigationOnClickListener( v -> new AlertDialog.Builder( requireContext() )
.setMessage( R.string.abort_editing )
.setPositiveButton( R.string.dialog_button_close, (dialog, whichButton) -> NavigationUI.navigateUp( navController, appBarConfiguration ) )
.setNegativeButton( R.string.dialog_button_cancel, null )
.show() );
}