通过 AdapterPosition 获取 RecyclerView 的视图

5
我有一个包含视频预览的RecyclerView。当用户滚动时,应自动播放对用户可见的recyclerView-item上的视频(当滚动状态为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);
}

请发布您的滚动监听器代码。 - pskink
1
你尝试过使用 RecyclerView#findViewHolderForAdapterPosition(int position) 或者 RecyclerView#findViewHolderForLayoutPosition(int position) 吗? - pskink
@pskink,您能将此发布为答案,以便我可以接受它吗? - PatrickMA
你可以在这里找到解决方案。链接描述 - Geet Thakur
1个回答

12

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

RecyclerView#findViewHolderForAdapterPosition(int position)
或者
RecyclerView#findViewHolderForLayoutPosition(int position)

返回的ViewHolder将持有您想要的View


1
非常感谢。我不知道为什么我没有找到这个。 - PatrickMA
еҸҜиғҪжҳҜеӣ дёәе®ғеңЁRecyclerViewзұ»дёӯиҖҢдёҚжҳҜжҲ‘们主иҰҒдҪҝз”Ёзҡ„RecyclerView#Adapterдёӯ... - pr-shadoko

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接