我正在尝试检查
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
方法中最后一个完全可见的项目位置:
(vYourRecycler.layoutManager as LinearLayoutManager).findLastCompletelyVisibleItemPosition()
((LinearLayoutManager) vYourRecycler.getLayoutManager()).findLastCompletelyVisibleItemPosition();
来自文档:
返回最后一个完全可见视图的适配器位置。这 位置不包括之后调度的适配器更改 最后一次布局。
尝试使用它并通知RecyclerView适配器刷新。
注意:我不知道你为什么在
findViewById
方法中使用 onScrolled
,这项工作应该在 RecyclerView ViewHolder 中实现以提高性能
LayoutManager
设置为RecyclerView
。如果您使用最常见的LinearLayoutManager,那么它有一些方法可以满足您的目的:
在StaggeredGridLayoutManager中也有类似的方法,例如查找第一个可见项目位置
一般方法是使用裸
LayoutManager
及其 isViewPartiallyVisible 方法,但这可能需要更多针对特定用例的代码