我有一个带有视频预览的 RecyclerView。 当用户滚动时,视频应该自动在用户可见的 recyclerView-items 上播放(当滚动状态为 IDLE 时)。
所以我编写了一个自定义的 onScrollListener,它将用户可见的位置作为数组传递给方法 startVideosOn(int[] positions)
。
但问题是当我想通过位置(位置等于适配器位置)获取 View 时。当我尝试 linearLayoutManager.getChildAt(index)
时,当显示第 3 个项目时我得到 null
,因为 RecyclerView 只有 2 个 child ,它们将被回收。
那么我如何设法通过适配器位置获取 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);
}
最佳答案
如果您需要获取可见“位置”的任何 View
,请使用:
RecyclerView#findViewHolderForAdapterPosition(int position)
或
RecyclerView#findViewHolderForLayoutPosition(int position)
返回的 ViewHolder
将容纳您想要的 View
关于java - 通过 AdapterPosition 获取 RecyclerView 的 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34719447/