如果 RecyclerView 位于 NestedScrollView 内并且回收器具有 nestedScrollingEnabled="false"
以便与 RecyclerView 上方的其他 View 平滑滚动,我如何获得 RecyclerView 中第一个/最后一个完全可见的项目。
所有这些功能
int findFirstVisibleItemPosition();
int findFirstCompletelyVisibleItemPosition();
int findLastVisibleItemPosition();
int findLastCompletelyVisibleItemPosition();
要么返回在 recyclerView 中创建的第一个/最后一个项目。
我想找到当前可见的项目,因为我想让 RecyclerView 无限滚动,如果只剩下几个项目要滚动,我应该获取数据。
谢谢
最佳答案
您可以在 nestedscrollview 上添加滚动监听器,并在滚动时检查 recylerview 中放置在 nestedScrollview 中的每个项目是否可见。 下面是例子
val scrollBounds = Rect()
nestedScrollView?.getHitRect(scrollBounds)
nestedScrollView?.addOnScrollListener(object : RecyclerView.OnScrollListener() {
override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) {
super.onScrolled(recyclerView, dx, dy)
val scrollBounds = Rect()
if (recyclerView != null && recyclerView.adapter != null
&& recyclerView.adapter?.itemCount != null
&& recyclerView.adapter?.itemCount!! > 0) {
for (i in 0 until recyclerView.adapter?.itemCount!!) {
var view = recyclerView?.findViewHolderForAdapterPosition(i)?.itemView
if (view != null) {
if (view.getLocalVisibleRect(scrollBounds)) {
if (!view.getLocalVisibleRect(scrollBounds)
|| scrollBounds.width() < view.getWidth()) {
Logger.debugLog("WidgetScrolled", "BTN APPEAR PARCIALY")
} else {
Logger.debugLog("WidgetScrolled", "BTN APPEAR FULLY!!!")
}
} else {
Logger.debugLog("WidgetScrolled", "No")
}
}
}
}
}
})
关于android - 在 NestedScrollView 中找不到 RecyclerView 可见项目位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43370430/