RecyclerView
有OnScrollListener
,可在手动或以编程方式滚动时提供回调。
然而,我发现它错过了一个场景 - 当RecyclerView
的底部项目的高度降低时。
用几句话可能很难想象,让我举个例子:
我有一个RecyclerView
,其中包含一些可扩展项。当用户折叠展开的项目时,项目视图高度将降低
现在,假设用户正在查看底部的展开项目,RecyclerView
也会滚动到底部。如果用户现在折叠该项目,RecyclerView
将调整其内容'位置,以便最底部项目的底部始终触及RecyclewView
的底部。
情况如下图所示:
实际上,我必须听这个RecyclerView
的滚动事件来调整一些视图元素(例如顶部的顶部浮动条)。但是因为"滚动"由于这样的项目高度变化不会触发OnScrollListener
,我该如何以其他方式收听此滚动?
答案 0 :(得分:0)
想出了一个替代方案,但效果非常好。
首先,我使用this library作为可扩展项目 当扩展状态更新时,此库具有回调,包括:
由于这种情况只发生在最后一项的折叠上,所以我所做的是:
onScroll
。以上所有内容都试图模拟RecyclerView的onScroll
。幸运的是,结果很好。
代码段:(在ExpandableLayout
的内部onExpansionUpdateListener
)
if (state == ExpandableLayout.State.COLLAPSING) {
if (lastItemTopPosition == null) {
lastItemTopPosition = itemView.getTop();
} else {
if (getAdapterPosition()+1 == getItemCount()) { //The last item
recyclerViewCompounded.onScroll(0, lastItemTopPosition - itemView.getTop());
lastItemTopPosition = itemView.getTop();
}
}
} else if (state == ExpandableLayout.State.COLLAPSED) {
lastItemTopPosition = null;
}