java - 通过 AdapterPosition 获取 RecyclerView 的 View

标签 java android view android-recyclerview android-adapter

我有一个带有视频预览的 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/

相关文章:

java - 访问 Lucene 4 中的术语统计信息

android - 在android中设置应用程序名称的问题?

javascript - MVC3 razor获取浏览器屏幕 View 中的宽度和高度

java - 如何构造一个具有抽象类类型字段的对象?

java - 如何在写入文件时创建字符串?

android - AdMob 展示位置

Android 调试 -> 电池耗尽

objective-c - 在 IB 中,如何将现有组件放置在新的 SplitView 中?

php - 如何向现有的 joomla 2.5 组件添加新 View (以及新的菜单项类型)?

java - Tomcat 7.0.61 未启动