0

Ich implementiere eine Android TV App und ich verwende HorizontalGridView aus der Leanback library. Ich habe ein benutzerdefiniertes Layout.Android Leanback-Bibliothek HorizontalGridView scrollToPosition funktioniert nicht

Ich muss die HorizontalGridView auf bestimmte Position scrollen, nach der Aktivität erstellt wird, aber leider funktioniert die scrollToPositio(position) Methode überhaupt nicht auf diesem Layout. Es tut einfach nichts. Ich fand, dass, wenn ich den layout manager spezifisch zu LinearLayoutManager setze, es funktioniert. Aber das Problem ist, dass, wenn ich nicht leanback Standard HorizontalGridView LayoutManager verwende, gibt es ein Problem mit der Fokussierung der nächsten Elemente mit D-Pad.

Grundsätzlich, wenn ich normale RecyclerView, die Steuerung mit D-Pad ist nicht wie erwartet funktioniert, so habe ich beschlossen, mit leanback Umsetzung zu gehen, wo dieses Problem gelöst ist, aber so weit ich kann es nicht mit scrollToPosition Methode arbeiten.

Irgendwelche Ideen?

Snippet meiner Code:

Layout:

<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() 

Und ich habe auch versucht, einige Hacks wie folgt aus:

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

Können Sie mit Referenzbild beschreiben. –

+0

Es gibt eigentlich nur eine Ansicht, die in der mobilen Version normale RecyclerView mit Horizontal LinearLayoutManager sein kann. Leider hat die Steuerung mit dem D-Pad auf dem Fernseher einige Probleme mit der Fokussierung der richtigen Elemente in RecyclerView, so dass es notwendig war, die Implementierung aus der Lehnenbibliothek zu verwenden, wo sie dieses Problem mit dem Zählen des nächsten Fokus behoben haben, aber aus irgendeinem Grund funktioniert scrollToPosition nicht . – Sandak

+1

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

Antwort