Ho un RecyclerView con anteprime video al suo interno. Quando l'utente sta scorrendo, i video dovrebbero essere riprodotti automaticamente sugli elementi recyclerView che sono visibili all'utente (quando lo stato di scorrimento è IDLE).Ottieni la vista di RecyclerView per AdapterPosition
Quindi ho scritto suScrollListener personalizzato che passa le posizioni che sono visibili all'utente come una matrice al metodo startVideosOn(int[] positions)
.
Ma il problema è quando voglio ottenere la vista dalla posizione (la posizione è uguale alla posizione dell'adattatore). Quando provo linearLayoutManager.getChildAt(index)
ottengo null
quando viene visualizzato il terzo elemento, perché RecyclerView ha solo 2 childs, che verranno riciclati.
Quindi, come posso ottenere il View
di RecyclerView in base alla posizione dell'adattatore?
Edit, questo è l'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 you scroll codice listener – pskink
provato 'RecyclerView # findViewHolderForAdapterPosition (int position)' o 'RecyclerView # findViewHolderForLayoutPosition (int position)'? – pskink
@pskink Puoi postare questo come risposta, quindi posso accettarlo? – PatrickMA