0

我正在实现一个 Android TV 应用程序,我正在HorizontalGridView使用Leanback library. 我有一个自定义布局。

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

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

有任何想法吗?

我的代码片段:

布局:

<android.support.v17.leanback.widget.HorizontalGridView
        android:id="@+id/photo_gallery_recycler"
        android:layout_width="match_parent"
        android:layout_height="@dimen/gallery_image_size"
        android:clipChildren="false"
        app:itemView="@{viewModel.photoItemView}"
        app:items="@{viewModel.photosUrl}"/>

代码 [科特林]:

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
4

1 回答 1

3

你需要使用setSelectedPosition(position)

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

setSelectedPosition 开发者文档。

于 2016-03-29T00:05:14.483 回答