Как сделать разбиение на страницы с помощью NestedScrollView?

Когда я разбиваю страницы с помощью вложенной прокрутки, это занимает слишком много времени, иногда мое приложение зависает? Подскажите, пожалуйста, как правильно реализовать разбиение на страницы с вложенным прокруткой.


person Danish Farooq    schedule 18.01.2018    source источник
comment
вы имеете в виду нумерацию страниц в RecyclerView?   -  person pskink    schedule 18.01.2018
comment
Мой Recyclerview находится внутри NestedScrollView, поэтому я получаю ответ от Nestedscrollview.   -  person Danish Farooq    schedule 18.01.2018
comment
извините, я понятия не имею, чего вы пытаетесь достичь   -  person pskink    schedule 18.01.2018
comment
Я обрабатывал всю разбивку на страницы с помощью действия вложенной прокрутки ... потому что вложенная прокрутка - это мое родительское представление.   -  person Danish Farooq    schedule 18.01.2018
comment
Проверьте этот ответ, я думаю, это то, чего вы пытаетесь достичь.   -  person yashkal    schedule 18.01.2018
comment
Ваш Recyclerview занимает так много времени, потому что он находится внутри NestedScrollView и получает полную длину. Таким образом, он продолжает автоматически вызывать Next Page до конца (вы можете проверить журналы).   -  person Satwinder Singh    schedule 21.09.2018


Ответы (2)


Добавьте этот класс в свой пакет

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

Теперь используйте TouchDetectableScrollView вместо NestedScrollView в коде xml и java. и установите 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

person Suraj Vaishnav    schedule 18.01.2018
comment
Да, это работает, спасибо... но загрузка занимает слишком много времени. - person Danish Farooq; 18.01.2018
comment
Может быть проблема с интернетом, какую библиотеку вы используете для вызова API? - person Suraj Vaishnav; 18.01.2018
comment
Нет, это не проблема с интернетом. Я использую библиотеку Retrofil для подключения - person Danish Farooq; 18.01.2018
comment
ваш пользовательский вложенныйScrollview отлично работает, но не работает на вкладке ViewPager? - person Ahsan Syed; 08.03.2021

1. Установить для вложенной прокрутки значение false для просмотра переработчика.

recyclerView.setNestedScrollingEnabled (ложь);

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

            }
        });
person Alok Singh    schedule 13.12.2018