NestedScrollView не запускается с Recyclerview внутри

У меня есть такой макет:

<NestedScrollView>
     <RecyclerView> // vertical recycler view
          <RecyclerView/>  // horizontal recycler view
          <RecyclerView/>
          <RecyclerView/>
          ...
     <RecyclerView>
</NestedScrollView>

Результат выглядит как Google play store: введите описание изображения здесь

И я отключил NestedScrolling в представлении horizontal Recycler:

horizontalRecyclerView.setHasFixedSize(true);
horizontalRecyclerView.setNestedScrollingEnabled(false);

Моя проблема:

vertical recyclerview не выполняет прокрутку, если ACTION_UP происходит, vertical recyclerview также останавливает прокрутку.

Как я могу вложить vertical recyclerview внутри nestedscrollview и horizontal recyclerview внутри vertical recyclerview, например, в PlayStore, и поддерживать плавность прокрутки.

Решено:

Использование пользовательского вложенного представления прокрутки @vrund purohit (код ниже) и отключенного вложенного scroll как вертикального, так и горизонтального recyclerview:

verticalRecyclerView.setNestedScrollingEnabled(false);
... add each horizontal recyclerviews:
horizontalRecyclerView.setNestedScrollingEnabled(false);

Ответы

Ответ 1

У меня была такая же проблема, и я решил эту проблему, настроив NeatedScrollView.

Вот класс для этого.

MyNestedScrollView

public class MyNestedScrollView extends NestedScrollView {
    @SuppressWarnings("unused")
    private int slop;
    @SuppressWarnings("unused")
    private float mInitialMotionX;
    @SuppressWarnings("unused")
    private float mInitialMotionY;
    public MyNestedScrollView(Context context) {
        super(context);
        init(context);
    }
    private void init(Context context) {
        ViewConfiguration config = ViewConfiguration.get(context);
        slop = config.getScaledEdgeSlop();
    }
    public MyNestedScrollView(Context context, AttributeSet attrs) {
        super(context, attrs);
        init(context);
    }
    public MyNestedScrollView(Context context, AttributeSet attrs,
            int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        init(context);
    }
    private float xDistance, yDistance, lastX, lastY;
    @SuppressWarnings("unused")
    @Override
    public boolean onInterceptTouchEvent(MotionEvent ev) {
        final float x = ev.getX();
        final float y = ev.getY();
        switch (ev.getAction()) {
        case MotionEvent.ACTION_DOWN:
            xDistance = yDistance = 0f;
            lastX = ev.getX();
            lastY = ev.getY();
            // This is very important line that fixes
            computeScroll();
            break;
        case MotionEvent.ACTION_MOVE:
            final float curX = ev.getX();
            final float curY = ev.getY();
            xDistance += Math.abs(curX - lastX);
            yDistance += Math.abs(curY - lastY);
            lastX = curX;
            lastY = curY;
            if (xDistance > yDistance) {
                return false;
            }
        }
        return super.onInterceptTouchEvent(ev);
    }
    public interface OnScrollChangedListener {
        void onScrollChanged(NestedScrollView who, int l, int t, int oldl,
                int oldt);
    }
    private OnScrollChangedListener mOnScrollChangedListener;
    public void setOnScrollChangedListener(OnScrollChangedListener listener) {
        mOnScrollChangedListener = listener;
    }
    @Override
    protected void onScrollChanged(int l, int t, int oldl, int oldt) {
        super.onScrollChanged(l, t, oldl, oldt);
        if (mOnScrollChangedListener != null) {
            mOnScrollChangedListener.onScrollChanged(this, l, t, oldl, oldt);
        }
    }
}

Счастливое кодирование.

Ответ 2

Используйте код ниже для плавного прокрутки:

ViewCompat.setNestedScrollingEnabled(recyclerView, false);

Ответ 3

[RESOLVED] У меня такая же проблема с Horizontal recycleview. Измените Gradle repo для recycleview

compile 'com.android.support:recyclerview-v7:23.2.1' Напишите это: linearLayoutManager.setAutoMeasureEnabled(true);

Исправлены ошибки, связанные с различными методами измерения в обновлении

Отметьте http://developer.android.com/intl/es/tools/support-library/features.html#v7-recyclerview

Я обнаружил проблему с библиотекой 23.2.1: Когда элемент match_parent recycle view заполняет полный элемент для просмотра, всегда используйте min height или "wrap_content".

Спасибо

Ответ 4

Добавьте это в свой RecyclerView xml:

android:nestedScrollingEnabled="false"

Ответ 5

Я решил проблему, используя нижеприведенный код:

        myRecyclerView.setLayoutManager(new LinearLayoutManager(getContext(), LinearLayoutManager.VERTICAL, false){
        @Override
        public boolean canScrollHorizontally() {
            return true;
        }

        @Override
        public boolean canScrollVertically() {
            return true;
        }
    });