我正在实现一个 Android TV 应用程序,我正在HorizontalGridView
使用Leanback library
. 我有一个自定义布局。
创建活动后,我必须滚动HorizontalGridView
到特定位置,但不幸的是,该scrollToPositio(position)
方法根本不适用于此布局。它什么也不做。我发现,当我专门设置它时layout manager
,LinearLayoutManager
它可以工作。但问题是,当我不使用leanback
defaultHorizontalGridView 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