小编Sta*_*wer的帖子

如何处理片段和viewpagers之间的backstack?

我正在使用具有 2 页的 ViewPager。ViewPager 的第一页是 MainFragment。MainFragment 有 ViewPager 作为bottomNavigationView。每个页面都有一个FragmentContainerView,默认情况下它们分别包含 HomeFragment、CommunityFragment 和 NotificationFragment。

这是源代码,这是项目的APK。因此,您可以轻松地对其进行测试和改进。

现在,如果我在 HomeFragment 中并单击一个配置文件按钮,那么它会处理到 ProfileFragment 并从那里进行设置等等。单击后退按钮,它会一一完美地返回。但它不会与其他FragmentContainerView. 即使他们直接回到父片段。总的来说,我无法处理不同 ViewPagers 和片段之间的 backstack。

为了避免混淆,FragmentContainers我像这样进行交易

val containerId = (view?.parent as ViewGroup).id
activity?.supportFragmentManager?.beginTransaction()?.add(containerId, profileFragment)?.addToBackStack(null)?.commit()
Run Code Online (Sandbox Code Playgroud)

现在 MainActivity 中 BackPressed() 的处理就在这里

if (view_pager_main_activity?.currentItem == 0)
{
    if (view_pager_main_fragment?.currentItem == 0)
    {
        val recyclerView = findViewById<RecyclerView>(R.id.recycler_view_home)
        val appbarHome = findViewById<AppBarLayout>(R.id.appbar_home)
        val layoutManager = recyclerView?.layoutManager as LinearLayoutManager
        when {
            layoutManager.findFirstCompletelyVisibleItemPosition() == 0 -> {
                super.onBackPressed() …
Run Code Online (Sandbox Code Playgroud)

android android-fragments android-viewpager back-stack onbackpressed

5
推荐指数
1
解决办法
155
查看次数