有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java通过AdapterPosition获取RecyclerView视图

我有一个带有视频预览的回收视图。 当用户滚动时,应在用户可见的recyclerView项目上自动播放视频(当滚动状态为空闲时)

因此,我编写了一个自定义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);
}

共 (1) 个答案

  1. # 1 楼答案

    如果您需要为可见的“位置”获取任何View,请使用:

    RecyclerView#findViewHolderForAdapterPosition(int position)
    

    RecyclerView#findViewHolderForLayoutPosition(int position)
    

    返回的ViewHolder将保存所需的View