0

J'applique une application Android TV et j'utilise HorizontalGridView à partir du Leanback library. J'ai une disposition personnalisée.Bibliothèque Android Leanback HorizontalGridView scrollToPosition ne fonctionne pas

Je dois faire défiler le HorizontalGridView à la position spécifique, après que l'activité est créée, mais malheureusement la méthode scrollToPositio(position) ne fonctionne pas du tout sur cette disposition. Ça ne fait rien. J'ai trouvé, que lorsque je définis spécifiquement le layout manager à LinearLayoutManager cela fonctionne. Mais le problème est que lorsque je n'utilise pas leanback par défaut HorizontalGridView LayoutManager, il y a un problème avec la mise au point des éléments suivants à l'aide du D-pad.

Fondamentalement, si j'utilise RecyclerView normal, le contrôle avec le D-pad ne fonctionne pas comme prévu, j'ai décidé d'aller avec la mise en œuvre leanback, où ce problème est résolu, mais jusqu'à présent, je ne peux pas le faire fonctionner avec la méthode scrollToPosition.

Des idées?

Snippet de mon code:

Mise en page:

<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}"/> 

code [Kotlin]:

binding.photoGalleryRecycler.scrollToPosition(position) 
binding.photoGalleryRecycler.getChildAt(position)?.requestFocus() 

Et j'ai essayé aussi quelques trucs comme celui-ci:

// 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

Pourriez-vous décrire plus avec l'écran de référence. –

+0

Il n'y a en réalité qu'une vue qui dans la version mobile peut être normale RecyclerView avec Horizontal LinearLayoutManager. Malheureusement, le contrôle avec D-pad sur les téléviseurs a quelques problèmes avec les bons éléments dans RecyclerView, il était donc nécessaire d'utiliser l'implémentation de la bibliothèque Leanback où ils ont résolu ce problème en comptant le focus suivant, mais pour une raison quelconque, scrollToPosition ne fonctionne pas. . – Sandak

+1

[setSelectedPosition (int)] (http://developer.android.com/intl/zh-cn/reference/android/support/v17/leanback/widget/HorizontalGridView.html#setSelectedPosition (entier)) – Dhina

Répondre