0

Android TVアプリケーションを実装しており、Leanback libraryHorizontalGridViewを使用しています。私はカスタムレイアウトを持っています。Android LeanbackライブラリHorizo​​ntalGridView scrollToPositionが機能しない

アクティビティが作成された後にHorizontalGridViewを特定の位置にスクロールする必要がありますが、残念ながらscrollToPositio(position)メソッドはこのレイアウトではまったく動作しません。それは何もしません。私が具体的にlayout managerLinearLayoutManagerに設定すると、それが機能することがわかりました。しかし問題は、私がleanbackのデフォルト値HorizontalGridView LayoutManagerを使用していないときは、Dパッドを使って次のアイテムに焦点を合わせることに問題があるということです。私はRecyclerViewノーマルを使用している場合

は基本的には、Dパッドで制御が期待通りに動作していないので、私は、この問題はこれまでのところ、私はそれがscrollToPosition方法で動作させることができない解決されているが、leanback実装、一緒に行くことにしました。

アイデア?

私のコードのスニペット:

レイアウト:

<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

を試すことができます。 –

+0

実際には、モバイルバージョンでは、水平のLinearLayoutManagerを使用して通常のRecyclerViewを表示できます。残念なことに、テレビのDパッドを使ったコントロールは、RecyclerViewの右アイテムに焦点を当てるといくつかの問題を抱えています。そのため、次の項目のフォーカスを数えることでこの問題を解決したleanbackライブラリから実装を使用する必要がありましたが、何らかの理由でscrollToPositionが。 – Sandak

+1

@Dhina:Your @Dhina:(setSelectedPosition(int))(http://developer.android.com/intl/zh-cn/reference/android/support/v17/leanback/widget/Horizo​​ntalGridView.html#setSelectedPosition(int)) – Dhina

答えて

1

あなたは使用する必要がありますアニメーションが必要な場合は

あなたが参照画面でより多くの説明でしたsetSelectedPositionSmooth(position)

setSelectedPosition Developer docs.

関連する問題