【发布时间】:2016-01-11 10:40:23
【问题描述】:
我有一个包含视频预览的 RecyclerView。 当用户滚动时,视频应自动在用户可见的 recyclerView-items 上播放(当滚动状态为 IDLE 时)。
所以我编写了一个自定义 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 你能把这个作为答案发布,所以我可以接受吗?
-
您可以在此处找到解决方案。 enter link description here
标签: java android view android-recyclerview android-adapter