【问题标题】:Get View of RecyclerView by AdapterPosition通过 AdapterPosition 获取 RecyclerView 的视图
【发布时间】: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


【解决方案1】:

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

RecyclerView#findViewHolderForAdapterPosition(int position)

RecyclerView#findViewHolderForLayoutPosition(int position)

返回的ViewHolder 将包含您想要的View

【讨论】:

  • 非常感谢。我不知道为什么我没有找到这个。
  • 可能是因为它在RecyclerView 类中,而不是在RecyclerView#Adapter 中,这是我们最常使用的一种......
猜你喜欢
  • 1970-01-01
  • 2015-11-17
  • 2016-02-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多