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

时间:2016-03-26 09:07:16

标签: android android-layout android-recyclerview android-tv leanback

我正在实施Android TV应用,并且使用HorizontalGridView中的Leanback library。我有一个自定义布局。

我必须在创建活动后将HorizontalGridView滚动到特定位置,但遗憾的是scrollToPositio(position)方法根本无法处理此布局。它什么都不做。我发现,当我专门将layout manager设置为LinearLayoutManager时,它可以正常工作。但问题是,当我没有使用leanback默认HorizontalGridView LayoutManager时,使用D-pad关注下一个项目时会出现问题。

基本上如果我使用普通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}"/>

代码[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

1 个答案:

答案 0 :(得分:1)

您需要使用setSelectedPosition(position)

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

setSelectedPosition Developer docs.