首页 > 解决方案 > Android Fragment Navigation 自定义导航返回按钮

问题描述

我需要导航一堆片段,我正在使用工具栏的后退按钮导航回来。我可以覆盖按下的后退按钮以设置自定义动画,例如滑出吗?

这是工具栏的代码。

private fun setupToolbar() {
    val appBarConfiguration = AppBarConfiguration(navController.graph, drawer_layout)
    val toolbar = toolbar as Toolbar
    setSupportActionBar(toolbar)
    toolbar.setupWithNavController(navController, appBarConfiguration)
    val ab: ActionBar? = supportActionBar
    ab?.setDisplayShowTitleEnabled(false) // disable the default title element here (for centered title)
    setupSearchQueryListener()
}

标签: androidandroid-toolbarandroid-architecture-navigationandroid-navigation

解决方案


在您的设置代码中,还需要做一件事:

    toolbar.setNavigationOnClickListener {
        onBackPressedDispatcher.onBackPressed() 
    }

在您的片段中,您可以这样做:

    protected lateinit var backPressedCallback: OnBackPressedCallback

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        backPressedCallback = requireActivity().onBackPressedDispatcher.addCallback(this) {
            // your code
        }
    }

以上将使您能够统一拦截向后导航并执行有问题的代码(您甚至可以通过玩backPressedCallback.isEnabled标志来阻止/解除阻止)。以上经过测试。说到设置导航动画,我只是在玩基于 xml 定义的基于动作的动画:

        <action
            android:id="@+id/toYourDest"
            app:destination="@+id/yourDest"
            app:enterAnim="@anim/your_slide_in_right"
            app:exitAnim="@anim/your_slide_out_left"
            app:popEnterAnim="@anim/your_slide_in_left"
            app:popExitAnim="@anim/your_slide_out_right" />

推荐阅读