Android Leanback 库 Horizo​​ntalGridView scrollToPosition 不起作用

Posted

技术标签:

【中文标题】Android Leanback 库 Horizo​​ntalGridView scrollToPosition 不起作用【英文标题】:Android Leanback library HorizontalGridView scrollToPosition doesn't work 【发布时间】:2016-07-14 00:14:48 【问题描述】:

我正在实现一个 android TV 应用,我正在使用来自 Leanback libraryHorizontalGridView。我有一个自定义布局。

创建活动后,我必须将HorizontalGridView 滚动到特定位置,但不幸的是scrollToPositio(position) 方法根本不适用于此布局。它什么也不做。我发现,当我专门将layout manager 设置为LinearLayoutManager 时,它可以工作。但问题是,当我不使用leanback 默认HorizontalGridView LayoutManager 时,使用方向键聚焦下一个项目时会出现问题。

基本上,如果我使用普通的RecyclerView,带有 D-pad 的控件无法按预期工作,所以我决定使用leanback 实现,这个问题得到了解决,但到目前为止我无法让它工作scrollToPosition 方法。

有什么想法吗?

我的代码片段:

布局:

<android.support.v17.leanback.widget.HorizontalGridView
        android:id="@+id/photo_gallery_recycler"
        android:layout_
        android:layout_
        android:clipChildren="false"
        app:itemView="@viewModel.photoItemView"
        app:items="@viewModel.photosUrl"/>

代码 [Kotlin]:

binding.photoGalleryRecycler.scrollToPosition(position)
binding.photoGalleryRecycler.getChildAt(position)?.requestFocus()

我还尝试了一些类似这样的技巧:

// save default leanback layout manager    
var defaultLayoutManager = binding.photoGalleryRecycler.layoutManager
// set LinearLayoutManager
binding.photoGalleryRecycler.layoutManager = LinearLayoutManager(activity, LinearLayoutManager.HORIZONTAL, false)
// scroll to position and request focus
binding.photoGalleryRecycler.scrollToPosition(position)
binding.photoGalleryRecycler.getChildAt(position)?.requestFocus()
// set default layout manager back to the view
binding.photoGalleryRecycler.layoutManager = defaultLayoutManager

【问题讨论】:

你能用参考屏幕描述更多吗? 实际上只有一个视图,在移动版本中可以是普通的RecyclerView和Horizo​​ntal LinearLayoutManager。不幸的是,电视上的 D-pad 控件在 RecyclerView 中聚焦正确的项目时遇到了一些问题,因此有必要使用来自leanback 库的实现,他们通过计算右下一个项目的焦点来解决这个问题,但由于某种原因,scrollToPosition 不起作用. setSelectedPosition(int) @Dhina:您的回答有效!非常感谢.. 你能把它添加为答案,以便我检查它作为答案吗? 【参考方案1】:

你需要使用setSelectedPosition(position)

如果需要动画可以试试setSelectedPositionSmooth(position)

setSelectedPosition Developer docs.

【讨论】:

以上是关于Android Leanback 库 Horizo​​ntalGridView scrollToPosition 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

使用 LeanBack 支持库自定义 Android TV 界面

Android Leanback 库 BrowseFragment

Android leanback 库 ListRowPresenter 整行展开

简化 Android TV / Leanback 的登录

如何使用 Leanback 库在 Android TV 中创建顶部导航栏

我们可以为 Android 移动应用程序使用 Leanback 库(视频播放器小部件)吗?