我需要知道我的 RecyclerView 中当前显示了哪些元素。 ListViews 上没有与 OnScrollListener.onScroll(...)
方法等效的方法。我尝试与 View.getGlobalVisibleRect(...)
一起工作,但是那个 hack 太难看而且并不总是有效。
有人有什么想法吗?
原文由 rekire 发布,翻译遵循 CC BY-SA 4.0 许可协议
我需要知道我的 RecyclerView 中当前显示了哪些元素。 ListViews 上没有与 OnScrollListener.onScroll(...)
方法等效的方法。我尝试与 View.getGlobalVisibleRect(...)
一起工作,但是那个 hack 太难看而且并不总是有效。
有人有什么想法吗?
原文由 rekire 发布,翻译遵循 CC BY-SA 4.0 许可协议
对于那些在 Kotlin 中寻找答案的人:
fun getVisibleItem(recyclerView : RecyclerView) {
recyclerView.addOnScrollListener(object: RecyclerView.OnScrollListener() {
override fun onScrollStateChanged(recyclerView: RecyclerView, newState: Int) {
if(newState == RecyclerView.SCROLL_STATE_IDLE) {
val index = (recyclerView.layoutManager.findFirstVisibleItemPosition
//use this index for any operation you want to perform on the item visible on screen. eg. log(arrayList[index])
}
}
})
}
您可以根据您的用例探索其他获取职位的方法。
int findFirstCompletelyVisibleItemPosition()
int findLastVisibleItemPosition()
int findLastCompletelyVisibleItemPosition()
原文由 Shubham 发布,翻译遵循 CC BY-SA 4.0 许可协议
2 回答1.3k 阅读✓ 已解决
2 回答2.6k 阅读
2 回答1.7k 阅读
1 回答2.1k 阅读
1 回答1.1k 阅读
1 回答1.3k 阅读
1.3k 阅读
第一个/最后一个可见的孩子取决于
LayoutManager
。如果您使用的是LinearLayoutManager
或GridLayoutManager
,您可以使用例如:
对于
LinearLayoutManager
,第一个/最后一个取决于适配器顺序。不要从RecyclerView
查询孩子;LayoutManager
可能更喜欢布局比可见缓存更多的项目。