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
Können Sie mit Referenzbild beschreiben. –
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
[setSelectedPosition (int)] (http://developer.android.com/intl/zh-cn/reference/android/support/v17/leanback/widget/HorizontalGridView.html#setSelectedPosition (int)) – Dhina