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.
Danke, nach dem Lesen Ihrer beiden Optionen tendiere ich auch Richtung Option 1. – Vpd