android - 使用导航组件处理工具栏后退按钮
问题描述
我正在遵循单一活动方法。我有导航工具栏,每当我转到其他屏幕(片段)而不是汉堡包图标时,我都会有后退箭头。
我想要实现的是,使用按下工具栏后退箭头的动作弹出我当前的片段。
我试过了
requireActivity().getOnBackPressedDispatcher().addCallback(this, new OnBackPressedCallback(true) {
@Override
public void handleOnBackPressed() {
NavHostFragment.findNavController(EventDetailsFragment.this)
.navigate(R.id.action_nav_event_details_to_nav_home);
}
});
但是没有接到电话,我通过在调试模式下运行应用程序进行了检查。
解决方案
在Activity
创建:
navController = findNavController(R.id.my_nav_host)
//my_nav_host defined in activity xml file as id of fragment or FragmentContainerView
val appBarConfiguration = AppBarConfiguration(navController.graph)
NavigationUI.setupActionBarWithNavController(this, navController, appBarConfiguration)
和:
override fun onOptionsItemSelected(item: MenuItem): Boolean {
if (item.itemId == android.R.id.home) {
onBackPressed()
return true
}
return true
}
然后在你的片段中:
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val callback: OnBackPressedCallback =
object : OnBackPressedCallback(true /* enabled by default */) {
override fun handleOnBackPressed() {
//do what you want here
}
}
requireActivity().onBackPressedDispatcher.addCallback(this, callback)
}
推荐阅读
- java - 为什么h2没有找到一列
- plsql - SQL Developer 中的 Oracle PL/SQL 脚本与 SQL(无效的更改选项)
- timer - 如何修复我的代码以使 STM32 Nucleo 板上的 LED 与 1 秒、50% 占空比 PWM 同步闪烁?
- javascript - MySQL将RowDataPacket的对象返回到节点js express
- javascript - 在动态创建的表单字段上自动完成表单字段
- node.js - 从 MongoDB 数组中删除对象 - mongoose
- r - 在 R 中为未命名的变量创建标签列
- javascript - 如何使用 gsap 和 javascript 切换标题?
- java - 为什么没有 RequestMappingHandlerMapping 类型的合格 bean?
- javascript - javascript:具有大量空值的二维数组 VS 使用索引的对象数组