Android Kotlin 辅助功能 - 在 RecyclerView 中滚动时向下移动焦点

问题描述 投票:0回答:0

我有一个 RecyclerView,它的布局管理器是一种 GridLayoutManager。我在我的应用程序中使用辅助功能。我的布局管理器的跨度数是 3。所以我有 3 列的项目,它们是可滚动的。

我的问题只出现在亚马逊平板电脑上。假设您关注的是第一行的第二项(行的中间项),并且您正在滚动屏幕。几秒钟后焦点仍然在同一个项目上,然后跳转到我屏幕的另一个视图。

我想要的是;当我专注于任何项目时,如果我滚动,那么如果我没有看到我的第一个项目,我想将我的焦点转移到第一个可见行的第一个项目。

所以场景是:关注第一行的中间项目,滚动屏幕,如果我没有看到我关注的项目,那么焦点将跳到第二行的第一个项目,滚动屏幕,如果我没有看到我关注的项目,那么焦点将跳到第三个行的第一项

我尝试的是:

binding.myRecyclerView.addOnScrollListener(object : RecyclerView.OnScrollListener() {
            override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) {
                super.onScrolled(recyclerView, dx, dy)
                val layoutManager = recyclerView.layoutManager as GridLayoutManager
                val firstVisibleItemPosition = layoutManager.findFirstVisibleItemPosition()
                recyclerView.layoutManager?.findViewByPosition(firstVisibleItemPosition)?.let {
                    ViewCompat.setAccessibilityDelegate(it, object : AccessibilityDelegateCompat() {
                        override fun onInitializeAccessibilityNodeInfo(host: View, info: AccessibilityNodeInfoCompat) {
                            super.onInitializeAccessibilityNodeInfo(host, info)
                            host.performAccessibilityAction(AccessibilityNodeInfo.ACTION_ACCESSIBILITY_FOCUS, null)
                            host.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_FOCUSED)
                        }
                    })
                }
            }
        })

但结果是,我无法通过点击来聚焦任何项目。始终停留在第一项。如果我向下滚动,它会跳转到新行的第一项(这很好)但是当我向上滚动时,焦点会在这两项之间变化。

我错过了什么?你能帮帮我吗?

android android-recyclerview
© www.soinside.com 2019 - 2024. All rights reserved.