检查项目在 RecyclerView 中是否完全可见

问题描述 投票:0回答:2

我正在尝试检查

RecyclerView
中是否可以看到某些特定项目;但我无法实现这一点。请帮助我确定我的物品在
RecyclerView
中是否完全可见。

mrecylerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
    @Override
    public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
        super.onScrolled(recyclerView, dx, dy);
        LinearLayout ll = (LinearLayout) recyclerView.findChildViewUnder(dx, dy);
        if (ll != null) {
            TextureVideoView tvv = (TextureVideoView) ll.findViewById(R.id.cropTextureView);
        }
    }
});

我想检查

tvv
视图在
mrecyclerView
视图中是否完全可见。

android-recyclerview android-scroll
2个回答
22
投票

您可以使用

LayoutManager
api 进行一些逻辑来获取 RecyclerView
onScrolled
方法中最后一个完全可见的项目位置:

科特林
(vYourRecycler.layoutManager as LinearLayoutManager).findLastCompletelyVisibleItemPosition()
Java
((LinearLayoutManager) vYourRecycler.getLayoutManager()).findLastCompletelyVisibleItemPosition();

来自文档:

返回最后一个完全可见视图的适配器位置。这 位置不包括之后调度的适配器更改 最后一次布局。

尝试使用它并通知RecyclerView适配器刷新。

注意:我不知道你为什么在

findViewById
方法中使用
onScrolled
,这项工作应该在 RecyclerView ViewHolder 中实现以提高性能


3
投票

您必须将

LayoutManager
设置为
RecyclerView
。如果您使用最常见的LinearLayoutManager,那么它有一些方法可以满足您的目的:

  • findFirstCompletelyVisibleItemPosition()
  • findFirstVisibleItemPosition()
  • findLastCompletelyVisibleItemPosition()
  • 查找LastVisibleItemPosition()

StaggeredGridLayoutManager中也有类似的方法,例如查找第一个可见项目位置

一般方法是使用裸

LayoutManager
及其 isViewPartiallyVisible 方法,但这可能需要更多针对特定用例的代码

© www.soinside.com 2019 - 2024. All rights reserved.