2016-06-20 12 views
1

Ich möchte eine einzige Liste von sehr großen Anzahl von UI-Elementen (1000s) in Android TV mit leanback-Bibliothek erstellen. Ich erweitere derzeit VerticalGridFragment und verwende ArrayObjectAdapter. Ich möchte mit dem Binden von (sagen wir) 100 Elementen beginnen und dann die nächsten 100 Elemente binden, wenn der Benutzer zum Ende der Liste scrollt. Ich sehe keine Möglichkeit, dieses Verhalten zu implementieren.Wie man eine große einzelne Liste effizient in Android TV mit leanback Bibliothek implementieren

VerticalGridFragment stellt zwei Listener bereit: OnItemViewClickedListener und OnItemViewSelectedListener. Es scheint sehr teuer zu sein, jedes ausgewählte Element anzuhören, bevor eine Abfrage für die nächsten 100 Elemente durchgeführt wird.

Irgendwelche Ideen? Vielen Dank.

Antwort

1

Es gibt zwei Ansätze, die ich mir vorstellen kann. Die erste besteht darin, das ausgewählte Element wie vorgeschlagen zu überprüfen. Das ist ähnlich meiner Antwort to this SO post. Der Listener selbst ist nicht teuer, und solange Sie Lightweight-Checks im Listener durchführen, hat dies einen vernachlässigbaren Effekt auf die Performance. Der Nachteil dieses Ansatzes besteht darin, dass Sie, wenn Sie sich auf einem Touchscreen-Gerät befinden (Running Leanback), nicht in der Lage sind, die Scroll-Position zu übernehmen, da das Scrolling allein nicht zur Auswahl von Elementen führt.

Option 1:

final int FETCH_NEXT_THRESHOLD = 5; // or NUM_COLUMNS * 2 if it's a grid 
final ListRow listRow = (ListRow) row; 
final ArrayObjectAdapter currentRowAdapter = listRow.getAdapter(); 
int selectedIndex = currentRowAdapter.indexOf(item); 
if (selectedIndex != -1 && (currentRowAdapter.size() - index < FETCH_NEXT_THRESHOLD) { 
    // One of the last FETCH_NEXT_THRESHOLD items was selected. 
    // Trigger next page fetch now. 
} 

Option 2:

Der andere Ansatz beruht auf der Tatsache, dass VerticalGridView von RecyclerView unterstützt wird. Sie könnten etwas Ähnliches wie this class verwenden. Dies überprüft die Anzahl der untergeordneten Elemente und zeigt an, welches Element gerade angezeigt wird. Dies hat einen noch größeren Einfluss auf die Leistung, da es häufiger getroffen wird (aber immer noch eine sehr geringe Auswirkung hat). Sie können dies erreichen, indem Sie ScrollListener zu Ihrem VerticalGridFragment hinzufügen, die Sie am wahrscheinlichsten unter der Presenter Ebene tun müssen.

Fazit:

Ich würde Option 1 vorschlagen, da es einfacher zu implementieren ist und die meisten Anwendungsfälle anzupassen. Aber wenn Sie besorgt sind über Touch-Screen-Geräte laufen Lehnen, möchten Sie vielleicht mit einem Ansatz ähnlich wie Option 2 gehen.

+0

Danke, nach dem Lesen Ihrer beiden Optionen tendiere ich auch Richtung Option 1. – Vpd