我正在实施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
答案 0 :(得分:1)
您需要使用setSelectedPosition(position)
如果需要动画,您可以尝试setSelectedPositionSmooth(position)