NestedScrollView setOnScrollChangeListener api 21
NestedScrollView setOnScrollChangeListener api 21
大家好,我正在尝试处理 recyclerView
中的 onScrolled
事件,它位于 NestedScrollView
.
中
到目前为止,我已经找到了 setOnScrollChangeListener
,但是这个方法是 API 23,我的目标是 API 21,有什么办法可以在 API21?
您可以使用下面的 ViewTreeObserver#addOnScrollChangedListener() 来实现 api 23:
mRecylerview.getViewTreeObserver().addOnScrollChangedListener(
new ViewTreeObserver.OnScrollChangedListener() {
@Override public void onScrollChanged() {
int x = toolbar.getScrollX();
int y = toolbar.getScrollY();
}
});
一段时间后我有了一个想法,我已经停止收听 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
是一个 class 属性,当我从服务器
回调 returns 时,我将其更改为 false
我认为您在 View.OnScrollChangeListener 中使用 setOnChangeScrollListener。
请像这样使用 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");
}
}
});
感谢 Kotlin 中的@NhatVM:
scrollView.setOnScrollChangeListener(
NestedScrollView.OnScrollChangeListener { nestedScrollView, scrollX, scrollY, oldScrollX, oldScrollY ->
// ...
}
)
大家好,我正在尝试处理 recyclerView
中的 onScrolled
事件,它位于 NestedScrollView
.
到目前为止,我已经找到了 setOnScrollChangeListener
,但是这个方法是 API 23,我的目标是 API 21,有什么办法可以在 API21?
您可以使用下面的 ViewTreeObserver#addOnScrollChangedListener() 来实现 api 23:
mRecylerview.getViewTreeObserver().addOnScrollChangedListener(
new ViewTreeObserver.OnScrollChangedListener() {
@Override public void onScrollChanged() {
int x = toolbar.getScrollX();
int y = toolbar.getScrollY();
}
});
一段时间后我有了一个想法,我已经停止收听 RecyclerView
上的滚动并开始收听 NestedScrollView
onScroll
事件。
我使用此代码段
成功实现了 loadOnDemandrecyclerView
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
是一个 class 属性,当我从服务器
我认为您在 View.OnScrollChangeListener 中使用 setOnChangeScrollListener。 请像这样使用 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");
}
}
});
感谢 Kotlin 中的@NhatVM:
scrollView.setOnScrollChangeListener(
NestedScrollView.OnScrollChangeListener { nestedScrollView, scrollX, scrollY, oldScrollX, oldScrollY ->
// ...
}
)