Android Leanback 库 HorizontalGridView scrollToPosition 不起作用
Posted
技术标签:
【中文标题】Android Leanback 库 HorizontalGridView scrollToPosition 不起作用【英文标题】:Android Leanback library HorizontalGridView scrollToPosition doesn't work 【发布时间】:2016-07-14 00:14:48 【问题描述】:我正在实现一个 android TV 应用,我正在使用来自 Leanback library
的 HorizontalGridView
。我有一个自定义布局。
创建活动后,我必须将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和Horizontal LinearLayoutManager。不幸的是,电视上的 D-pad 控件在 RecyclerView 中聚焦正确的项目时遇到了一些问题,因此有必要使用来自leanback 库的实现,他们通过计算右下一个项目的焦点来解决这个问题,但由于某种原因,scrollToPosition 不起作用. setSelectedPosition(int) @Dhina:您的回答有效!非常感谢.. 你能把它添加为答案,以便我检查它作为答案吗? 【参考方案1】:你需要使用setSelectedPosition(position)
如果需要动画可以试试setSelectedPositionSmooth(position)
setSelectedPosition Developer docs.
【讨论】:
以上是关于Android Leanback 库 HorizontalGridView scrollToPosition 不起作用的主要内容,如果未能解决你的问题,请参考以下文章
使用 LeanBack 支持库自定义 Android TV 界面
Android Leanback 库 BrowseFragment
Android leanback 库 ListRowPresenter 整行展开