Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/179.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何使用NestedScrollView进行分页?_Android_Android Recyclerview_Pagination_Android Nestedscrollview_Recyclerview Layout - Fatal编程技术网

Android 如何使用NestedScrollView进行分页?

Android 如何使用NestedScrollView进行分页?,android,android-recyclerview,pagination,android-nestedscrollview,recyclerview-layout,Android,Android Recyclerview,Pagination,Android Nestedscrollview,Recyclerview Layout,当我使用嵌套滚动视图进行分页时,会花费太多时间,有时我的应用程序会挂起?请告诉我使用嵌套的scrollview实现分页的正确方法在包中添加此类 import android.content.Context; import android.support.v4.widget.NestedScrollView; import android.util.AttributeSet; import android.view.View; public class TouchDetectableSc

当我使用嵌套滚动视图进行分页时,会花费太多时间,有时我的应用程序会挂起?请告诉我使用嵌套的scrollview实现分页的正确方法在包中添加此类

    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();
    }
}

方法中执行分页任务
方法

在包中添加此类

    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();
    }
}

方法中执行分页任务
方法

1。将“回收器”视图的嵌套滚动启用设置为false

recyclerView.setNestedScrollingEnabled(false)

2.将滚动列表添加到嵌套滚动视图中

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);

            }
        });
nestedScrollView.setOnScrollChangeListener(新的nestedScrollView.OnScrollChangeListener(){
@凌驾
public void onScrollChange(嵌套ScrollView v、int scrollX、int scrollY、int oldScrollX、int oldScrollY){
如果(isFeedsFetchInProgress)
回来
如果(!mOnLastPage){
int visibleItemCount=linearLayoutManager.getChildCount();
int totalItemCount=linearLayoutManager.getItemCount();
int pastVisibleItems=linearLayoutManager.findFirstVisibleItemPosition();
如果(pastVisibleItems+visibleItemCount>=totalItemCount){
//列表末尾
mPageToRequest++;
loader=loader.BOTTOM;
hitApiRequest(ApiConstants.REQUEST\u TYPE.GET\u reference\u LIST);
}
}
//int-topRowVerticalPosition=(recyclerView==null | | recyclerView.getChildCount()==0)?0:recyclerView.getChildAt(0).getTop();

swipeRefreshLayout.setEnabled(scrollY1.设置嵌套滚动启用回收器视图的false

recyclerView.setNestedScrollingEnabled(false)

2.将滚动列表添加到嵌套滚动视图中

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);

            }
        });
nestedScrollView.setOnScrollChangeListener(新的nestedScrollView.OnScrollChangeListener(){
@凌驾
public void onScrollChange(嵌套ScrollView v、int scrollX、int scrollY、int oldScrollX、int oldScrollY){
如果(isFeedsFetchInProgress)
回来
如果(!mOnLastPage){
int visibleItemCount=linearLayoutManager.getChildCount();
int totalItemCount=linearLayoutManager.getItemCount();
int pastVisibleItems=linearLayoutManager.findFirstVisibleItemPosition();
如果(pastVisibleItems+visibleItemCount>=totalItemCount){
//列表末尾
mPageToRequest++;
loader=loader.BOTTOM;
hitApiRequest(ApiConstants.REQUEST\u TYPE.GET\u reference\u LIST);
}
}
//int-topRowVerticalPosition=(recyclerView==null | | recyclerView.getChildCount()==0)?0:recyclerView.getChildAt(0).getTop();


swipeRefreshLayout.setEnabled(scrollY你的意思是在
RecyclerView
中分页?我的RecyclerView在NestedScrollView中,所以我从NestedScrollView获得操作响应抱歉,我不知道你想实现什么我用NestedScrollView操作处理所有分页..因为NestedScrollView是我的父视图。你的RecyclerView花费了很多时间,因为我t在NestedScrollView中,它得到了完整的长度。因此它会一直自动调用下一页,直到结束(您可以检查日志)。你的意思是在
RecyclerView
中分页吗?我的RecyclerView在NestedScrollView中,所以我从NestedScrollView获得操作响应抱歉,我不知道你想实现什么。我用NestedScrollView操作处理了所有分页。因为NestedScrollView是我的父视图。你的RecyclerView花费了很多时间,因为它是inside嵌套了ScrollView,它正在获取完整的长度。因此,它会一直自动调用下一页,直到结束(您可以检查日志)。是的,它可以正常工作,谢谢。。但它的加载时间太长。可能是internet问题,您使用哪个库进行API调用?不,这不是internet问题。我正在使用Retrofil库进行连接。您的自定义嵌套ScrollView可以正常工作,但无法在ViewPager选项卡中工作?是的,它可以正常工作,谢谢。。但它需要太多时间加载。可能是internet问题,您正在使用哪个库进行API调用?不,这不是internet问题。我正在使用Retrofil库进行连接您的自定义嵌套ScrollView工作正常,但在ViewPager选项卡中不工作?