Mam widok RecyclerView z podglądem wideo w nim. Gdy użytkownik przewija, filmy powinny być automatycznie odtwarzane na elementach recyclerView, które są widoczne dla użytkownika (gdy stan przewijania jest IDLE).Wyświetl widok z RecyclerView by AdapterPosition
Więc napisałem niestandardowy onScrollListener, który przekazuje pozycje, które są widoczne dla użytkownika jako tablica do metody startVideosOn(int[] positions)
.
Ale problem polega na tym, że chcę uzyskać widok według pozycji (pozycja jest równa pozycji adaptera). Kiedy próbuję linearLayoutManager.getChildAt(index)
otrzymuję null
, gdy wyświetlany jest trzeci element, ponieważ widok RecyclerView ma tylko 2 childs, które zostaną poddane recyklingowi.
Jak mogę uzyskać View
z RecyclerView według pozycji adaptera?
Edycja ta jest 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);
}
po przewinąć kod słuchacza – pskink
Próbowałem 'RecyclerView # findViewHolderForAdapterPosition (pozycja int)' lub 'RecyclerView # findViewHolderForLayoutPosition (pozycja int)'? – pskink
@pskink Czy możesz to opublikować jako odpowiedź, więc mogę ją zaakceptować? – PatrickMA