我有一个包含视频预览的RecyclerView。当用户滚动时,应自动播放对用户可见的recyclerView-item上的视频(当滚动状态为IDLE时)。
因此,我编写了一个自定义onScrollListener,将对用户可见的位置作为数组传递给方法
但问题是,当我想通过位置获取视图(位置等于适配器位置)时,尝试使用
那么,如何通过适配器位置获取RecyclerView的
编辑,这是OnScrollListener:
因此,我编写了一个自定义onScrollListener,将对用户可见的位置作为数组传递给方法
startVideosOn(int[] positions)
。但问题是,当我想通过位置获取视图(位置等于适配器位置)时,尝试使用
linearLayoutManager.getChildAt(index)
时,当显示第三个项目时,我会得到null
,因为RecyclerView只有2个子项,这些子项将被回收。那么,如何通过适配器位置获取RecyclerView的
View
?编辑,这是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);
}
RecyclerView#findViewHolderForAdapterPosition(int position)
或者RecyclerView#findViewHolderForLayoutPosition(int position)
吗? - pskink