Ich habe eine RecyclerView mit Video-Vorschau in es. Wenn der Benutzer scrollt, sollten die Videos automatisch auf den RecyclerView-Elementen abgespielt werden, die für den Benutzer sichtbar sind (wenn scroll-state IDLE ist).Get View von RecyclerView von AdapterPosition
Also habe ich einen benutzerdefinierten onScrollListener geschrieben, der die Positionen, die für den Benutzer als ein Array angezeigt werden, an die Methode startVideosOn(int[] positions)
übergibt.
Aber das Problem ist, wenn ich die Ansicht durch die Position bekommen möchte (die Position ist gleich der Adapterposition). Wenn ich linearLayoutManager.getChildAt(index)
versuche, erhalte ich null
, wenn der 3. Gegenstand angezeigt wird, weil der RecyclerView nur 2 Kinder hat, die recycelt werden.
Wie also schaffe ich es, die View
des RecyclerView durch Adapterposition zu bekommen?
bearbeiten, ist dies die OnScrollListener:
public abstract class AutoPlayRecyclerOnScrollListener extends RecyclerView.OnScrollListener {
LinearLayoutManager linearLayoutManager;
public AutoPlayRecyclerOnScrollListener(LinearLayoutManager linearLayoutManager) {
this.linearLayoutManager = linearLayoutManager;
}
@Override
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
super.onScrollStateChanged(recyclerView, newState);
if (newState == AbsListView.OnScrollListener.SCROLL_STATE_IDLE) {
int firstVisibleItemPosition = linearLayoutManager.findFirstVisibleItemPosition();
int lastVisibleItemPosition = linearLayoutManager.findLastVisibleItemPosition();
if (firstVisibleItemPosition != -1 && lastVisibleItemPosition != -1) {
playOn(firstVisibleItemPosition, lastVisibleItemPosition);
}
}
}
private void playOn(int lower, int upper) {
int[] completelyVisibleItems = new int[upper - lower + 1];
for (int i = lower, j = 0; i <= upper; i++, j++) {
completelyVisibleItems[j] = i;
}
playOn(completelyVisibleItems);
}
public abstract void playOn(int[] items);
}
Post Sie scrollen Listener-Code – pskink
probiert 'RecyclerView # findViewHolderForAdapterPosition (int Position)' oder 'RecyclerView # findViewHolderForLayoutPosition (int Position)'? – pskink
@pskink Können Sie dies als Antwort posten, damit ich es akzeptieren kann? – PatrickMA