你好伙计我正试图在我的onScrolled
处理一个recyclerView
事件,那是在NestedScrollView
内部。
到目前为止,我找到了setOnScrollChangeListener
,但是这个方法是API 23,而我的目标是API 21,任何想法在API 21中处理这个问题?
过了一段时间我有了一个想法,我已经停止听RecyclerView
滚动并开始听NestedScrollView
onScroll
事件。
我设法使用此片段制作我的loadOnDemand recyclerView
nsv_posts_timeline.setOnScrollChangeListener(
NestedScrollView.OnScrollChangeListener {
_, scrollX, scrollY, _, oldScrollY ->
if(scrollY > oldScrollY){
val totalItens = timelineAdapter.itemCount
val currentView = rv_timeline.findChildViewUnder(scrollX.toFloat(), scrollY.toFloat())
val childPosition = rv_timeline.getChildAdapterPosition(currentView)
if((totalItens/2) - (stepSize/2) <= childPosition && !isLoading){
isLoading = true
//skip , take
timelinePresenter.loadMore(totalItens, 5)
}
}
})
isLoading
是一个类属性,当我的回调从服务器返回时,我将其更改为false
你可以使用api 23下面的ViewTreeObserver#addOnScrollChangedListener()来实现它:
mRecylerview.getViewTreeObserver().addOnScrollChangedListener(
new ViewTreeObserver.OnScrollChangedListener() {
@Override public void onScrollChanged() {
int x = toolbar.getScrollX();
int y = toolbar.getScrollY();
}
});
我认为您正在将ViewOnChangeScrollListener与View.OnScrollChangeListener一起使用。请使用NestedScrollView.OnScrollChangeListener:
scvProduct.setOnScrollChangeListener(new NestedScrollView.OnScrollChangeListener() {
@Override
public void onScrollChange(NestedScrollView nestedScrollView,int scrollX, int scrollY, int oldScrollX, int oldScrollY) {
Log.e("ProductFragment","position button " + topPositionButton + " scrollY " + scrollY);
if(scrollY > oldScrollY){
Log.e("ProductFragment","down");
}
else{
Log.e("ProductFragment","up");
}
}
});