当我使用嵌套滚动视图进行分页时,它需要花费太多时间,有时我的应用程序会挂起?请告诉我使用嵌套scrollview实现分页的正确方法
1.设置嵌套滚动,启用回收器视图的false。
recyclerView.setNestedScrollingEnabled(假);
2.将滚动侦听器添加到nestedscrollview。
nestedScrollView.setOnScrollChangeListener(new NestedScrollView.OnScrollChangeListener() {
@Override
public void onScrollChange(NestedScrollView v, int scrollX, int scrollY, int oldScrollX, int oldScrollY) {
if (isFeedsFetchInProgress)
return;
if(!mOnLastPage) {
int visibleItemCount = linearLayoutManager.getChildCount();
int totalItemCount = linearLayoutManager.getItemCount();
int pastVisibleItems = linearLayoutManager.findFirstVisibleItemPosition();
if (pastVisibleItems + visibleItemCount >= totalItemCount) {
//End of list
mPageToRequest++;
loader = LOADER.BOTTOM;
hitApiRequest(ApiConstants.REQUEST_TYPE.GET_REFERRAL_LIST);
}
}
// int topRowVerticalPosition = (recyclerView == null || recyclerView.getChildCount() == 0) ? 0 : recyclerView.getChildAt(0).getTop();
swipeRefreshLayout.setEnabled(scrollY <= 0);
}
});
在您的包中添加此类
import android.content.Context;
import android.support.v4.widget.NestedScrollView;
import android.util.AttributeSet;
import android.view.View;
public class TouchDetectableScrollView extends NestedScrollView {
OnMyScrollChangeListener myScrollChangeListener;
public TouchDetectableScrollView(Context context) {
super(context);
}
public TouchDetectableScrollView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public TouchDetectableScrollView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
protected void onScrollChanged(int l, int t, int oldl, int oldt) {
super.onScrollChanged(l, t, oldl, oldt);
if (myScrollChangeListener!=null)
{
if (t>oldt)
{
myScrollChangeListener.onScrollDown();
}
else if (t<oldt){
myScrollChangeListener.onScrollUp();
}
View view = (View) getChildAt(getChildCount()-1);
int diff = (view.getBottom()-(getHeight()+getScrollY()));
if (diff == 0 ) {
myScrollChangeListener.onBottomReached();
}
}
}
public OnMyScrollChangeListener getMyScrollChangeListener() {
return myScrollChangeListener;
}
public void setMyScrollChangeListener(OnMyScrollChangeListener myScrollChangeListener) {
this.myScrollChangeListener = myScrollChangeListener;
}
public interface OnMyScrollChangeListener
{
public void onScrollUp();
public void onScrollDown();
public void onBottomReached();
}
}
现在在你的xml和java代码中使用TouchDetectableScrollView
而不是NestedScrollView
。并像这样设置Listener:
TouchDetectableScrollView nestedScrollView=findViewById(R.id.nestedScrollView);
nestedScrollView.setMyScrollChangeListener(new TouchDetectableScrollView.OnMyScrollChangeListener() {
@Override
public void onScrollUp() {
}
@Override
public void onScrollDown() {
}
@Override
public void onBottomReached() {
// api call for pagination
}
});
在onBottomReached
方法中执行你的分页任务