Android Fragments ViewPager 2和Jetpack导航:如何获取对当前ViewPager 2页面/片段的引用?

fcy6dtqo  于 5个月前  发布在  Android
关注(0)|答案(1)|浏览(86)

我正在创建一个启动器应用程序与D-Pad的设备量身定制。当与ViewPager 2工作时,我不得不在D-Pad支持工作,以实现适当的页面切换和聚焦。
我已经在我的应用中引入了导航组件,这样我就可以在应用抽屉中导航了。不幸的是,在将ViewPager 2放入NavGraph并让NavHost处理它之后,我用来获取当前页面/片段引用的代码(childFragmentManager.findFragmentByTag("f${viewPager.currentItem}"))已经停止工作,始终返回null
下面是旧代码,当我没有NavHost设置时,它工作得很好。psLis是一个回调函数,它被传递到HomeFragment(ListAdapter host/initializer),并从那里传递到HomeAdapter(ListAdapter),它设置了一个OnKeyboard来调用最左边/最右边的单元格上的psLis。

HomePager.kt(包含ViewPager 2示例、导航指示灯、'dock'、应用抽屉)

// .....
val psLis: (Char, Int) -> Unit = { direction, pos ->
            val curItem = viewPager.currentItem
            val TAG = "psLis"
            Log.d(TAG, "Page-switch listener initiated.")

            if (direction == 'l' && curItem > 0) {
                viewPager.currentItem = curItem - 1
                val curFragment = // Get page fragment
                    childFragmentManager.findFragmentByTag("f${viewPager.currentItem}")
                Log.d(TAG, "curFragment is $curFragment")
                if (curFragment is HomeFragment) {
                    curFragment.setFocus(pos + 3) // Set the focus within the same row
                }
            } else if (direction == 'r' && curItem < (NUM_PAGES - 1)) {
                viewPager.currentItem = curItem + 1
                val curFragment =
                    childFragmentManager.findFragmentByTag("f${viewPager.currentItem}")
                Log.d(TAG, "curFragment is $curFragment")
                if (curFragment is HomeFragment) {
                    curFragment.setFocus(pos - 3)
                }
            }
        }

字符串

HomeFragment.kt(删除/删除主屏幕ListAdapter)

// .....
fun setFocus(pos: Int) {
        val child = binding.recyclerView.getChildAt(pos)
        child.requestFocus()
    }


同样,在我让NavHost处理ViewPager 2之后,childFragmentManager.findFragmentByTag("f${viewPager.currentItem}")才开始返回null
parentFragmentManager.fragments返回单个HomePager示例,childFragmentManager.fragments返回空白列表。
我觉得我已经用尽了更相关的功能,我还没有能够找到任何人面临这个特定的问题上StackOverflow或一般的网络。任何帮助/建议将非常感谢。干杯。

mpgws1up

mpgws1up1#

使用导航组件时,请尝试使用:

navHostFragment.childFragmentManager.findFragmentByTag(TAG)

字符串

相关问题