我试图检查是否在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
视图中完全可见
您可以使用LayoutManager
api进行一些逻辑,以获得RecyclerView onScrolled
方法中最后一个完全可见的项目位置:
芬兰湾的科特林h5> Java h5> 自文档:
返回最后一个完全可见视图的适配器位置。这位置不包括之后分派的适配器更改最后一次布局通过。
返回最后一个完全可见视图的适配器位置。这位置不包括之后分派的适配器更改最后一次布局通过。
尝试使用它并通知RecyclerView适配器刷新。
注意:我不知道为什么你在onScrolled
方法中使用findViewById
,这项工作应该在RecyclerView ViewHolder中实现,以提高性能
您必须为RecyclerView
设置LayoutManager
。如果你正在使用最常见的LinearLayoutManager,那么它有一些方法为您的目的:
- findFirstCompletelyVisibleItemPosition ()
- findFirstVisibleItemPosition ()
- findLastCompletelyVisibleItemPosition ()
- findLastVisibleItemPosition ()
在StaggeredGridLayoutManager中也有类似的方法,例如findFirstVisibleItemPositions
一般的方法是使用裸LayoutManager
和它的isViewPartiallyVisible方法,但这可能需要更多的代码为特定的用例