我想使用导航组件从片段添加自定义 * 向上导航 *
在我的build.gradle(app)
中,我使用androidx.appcompat:appcompat:1.1.0-alpha04
依赖项从活动访问onBackPressedDispatcher
。
因此,我在片段中实现了OnBackPressedCallback
,并将回调注册到调度程序:
requireActivity().onBackPressedDispatcher.addCallback(this)
我希望按工具栏中的 navigate up 可以调用它,但它没有。按设备的后退按钮可以调用它。
是否有类似的方法在向上导航动作的片段中添加一些回调?
更新
按下工具栏中的 * 向上按钮 * 时,未调用覆盖方法onOptionsItemSelected
和onSupportNavigateUp
6条答案
按热度按时间vfh0ocws1#
我找到了解决办法
handleOnBackPressed()
方法只在单击设备的后退按钮时调用。我想知道,为什么在按工具栏中的“向上按钮”时onOptionsItemSelected()
和onSupportNavigateUp()
方法都没有被调用。答案是我使用了在Activity中设置带有导航组件工具栏,并使工具栏响应内部导航,按“向上按钮”不会调用Activity或片段中的任何重写方法。
而应使用
这将使actionBar对导航做出响应,因此我可以使用覆盖函数
onOptionsItemSelected()
和onSupportNavigateUp()
。(在我的情况下)为某个屏幕的“向上按钮”单击添加自定义行为的最佳位置是托管活动,比如
但值得一提的是,如果你想直接在片段中实现自定义行为,@Enzokie的答案应该像一个魅力
5hcedyr02#
您需要从
onBackPressedDispatcher
属性调用onBackPressed()
。假设您的工具栏设置正确,您可以在Activity中使用以下代码。分段覆盖时
它的作用是:
触发对当前添加的OnBackPressedCallback回调的调用,调用顺序与添加时的顺序相反。仅当其
OnBackPressedCallback#handleOnBackPressed()
中的false最多时,才会调用任何以前添加的回调。我在示例中使用的是AndroidX,因此导入将如下所示
import androidx.appcompat.app.AppCompatActivity
.o2rvlv0m3#
此设置也有效,您无需在Activity中覆盖
onSupportNavigateUp
:我更喜欢设置
Toolbar
,因为它将自动处理向上导航和打开/关闭DrawerLayout
,如果你有一个。ozxc1zmp4#
我已经在残篇中单独使用了这个方法:
还要求将其放在此处:https://issuetracker.google.com/issues/273299805
dwthyt8l5#
以这种方式将单击事件添加到工具栏后退按钮
另一种方法
olhwl3o26#
我使用以下步骤自定义了**(直接在Fragment中)**Toolbar上的背景:
1.创建[作业单元]:
NavigationUI.setupActionBarWithNavController(this, navController, appBarConfiguration)
2.关于支持向上导航[活动]:
3.自定义或禁用反按[片段]: