Backstack 像 instagram 一样,带有 viewpager 和 BottomNavigationBar

mr.*_*oot 6 android instagram back-stack bottomnavigationview android-viewpager2

我创建了一个 android 应用程序(示例 APKGithub Repo),我在其中实现了一个BottomNavigationBarwith ViewPager. 导航没问题,但我不知道如何在像 Instagram 这样的 viewpager 中处理返回堆栈。

我尝试了下面的代码,但这样我必须创建一个我从不导航的不必要的片段。

 view_pager_main_activity?.currentItem = view_pager_main_activity.currentItem - 1
Run Code Online (Sandbox Code Playgroud)

假设我只是将应用程序启动到第一页,然后通过 BottomNavBar 导航到第三页,但是现在如果我单击后退按钮,我会通过第二页返回到第一页。所以这样我创建了不需要的第二页。

这是 onBackPressed() 的整个回栈过程

override fun onBackPressed() {

       if (view_pager_main_activity?.currentItem == 0) {
            if (view_pager_main_fragment?.currentItem == 0) {
                val recyclerView = findViewById<RecyclerView>(R.id.listRecyclerView)
                val appbarHome = findViewById<AppBarLayout>(R.id.appbar_home)
                val layoutManager = recyclerView?.layoutManager as LinearLayoutManager
                when {
                    layoutManager.findFirstCompletelyVisibleItemPosition() == 0 -> {
                        super.onBackPressed()
                    }
                    supportFragmentManager.backStackEntryCount != 0 -> {
                        supportFragmentManager.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE)
                    }
                    else -> {
                        layoutManager.scrollToPositionWithOffset(0, 0)
                        appbarHome.setExpanded(true)
                    }
                }
            } else if (supportFragmentManager.backStackEntryCount != 0) {
                super.onBackPressed()
            } else {
                view_pager_main_fragment?.setCurrentItem(
                        view_pager_main_fragment.currentItem - 1,
                        false
                )
            }
        } else if (supportFragmentManager.backStackEntryCount != 0) {
            super.onBackPressed()
        } else {
            view_pager_main_activity?.currentItem = view_pager_main_activity.currentItem - 1
        }
    }
Run Code Online (Sandbox Code Playgroud)

我想要与 Instagram 一样的返回堆栈导航,所以我尝试了这种方式,但已弃用。我不知道我怎样才能做到这一点。