Получить представление RecyclerView с помощью AdapterPosition
У меня есть RecyclerView с предварительным просмотром видео. Когда пользователь прокручивает, видео должно автоматически воспроизводиться на recyclerView-элементах, которые видны пользователю (когда состояние прокрутки неактивно).
Поэтому я написал пользовательский onScrollListener, который передает позиции, видимые пользователю в виде массива, в метод startVideosOn(int[] positions)
.
Но проблема в том, когда я хочу получить представление по позиции (позиция равна позиции адаптера). Когда я пытаюсь linearLayoutManager.getChildAt(index)
, я получаю null
когда отображается 3-й элемент, потому что RecyclerView имеет только 2 ребенка, которые будут переработаны.
Итак, как мне удается получить View
из RecyclerView по позиции адаптера?
Edit, это 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);
}