Вложенный ScrollView с фрагментом и RelativeLayout (содержащий RecyclerView) без прокрутки - PullRequest
0 голосов
/ 14 января 2020

У меня есть макет с NestedScrollView, который содержит один LinearLayout.

Этот LinearLayout содержит Fragment (FrameLayout как контейнер) и RelativeLayout, содержащий RecyclerView.

Проблема заключается в том, что только RecyclerView прокрутка и предметы идут под фрагментом.

В идеале фрагмент должен прокручиваться вверх вместе с рециклером. Я попытался установить nestedScrollingEnabled = false в обзоре утилизатора, но это остановило прокрутку все вместе (даже для просмотра утилизатора).

Вот макет:

<?xml version="1.0" encoding="utf-8"?>

<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:list="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools">


    <android.support.v4.widget.NestedScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:fillViewport="true"
        android:overScrollMode="never">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:animateLayoutChanges="true"
            android:orientation="vertical">

            <FrameLayout
                android:id="@+id/header_container"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:animateLayoutChanges="true"
                android:orientation="vertical" />

            <RelativeLayout
                android:id="@+id/paginated_list"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_below="@id/header_container"
                android:paddingLeft="@dimen/card_margin"
                android:paddingRight="@dimen/card_margin">

                   ... swiperefreshlayout, recyclerview here.

              </RelativeLayout>

        </LinearLayout>
    </android.support.v4.widget.NestedScrollView>
</layout>

Может кто-нибудь сказать мне, что не так?

1 Ответ

0 голосов
/ 15 января 2020

Попробуйте:

VerticalScrollview. java

import android.content.Context;
import android.util.AttributeSet;
import android.util.Log;
import android.view.MotionEvent;
import android.widget.ScrollView;

public class VerticalScrollview extends ScrollView {

    public VerticalScrollview(Context context) {
        super(context);
    }

    public VerticalScrollview(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public VerticalScrollview(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    @Override
    public boolean onInterceptTouchEvent(MotionEvent ev) {
        final int action = ev.getAction();
        switch (action)
        {
            case MotionEvent.ACTION_DOWN:
                Log.i("VerticalScrollview", "onInterceptTouchEvent: DOWN super false" );
                super.onTouchEvent(ev);
                break;

            case MotionEvent.ACTION_MOVE:
                return false; // redirect MotionEvents to ourself

            case MotionEvent.ACTION_CANCEL:
                Log.i("VerticalScrollview", "onInterceptTouchEvent: CANCEL super false" );
                super.onTouchEvent(ev);
                break;

            case MotionEvent.ACTION_UP:
                Log.i("VerticalScrollview", "onInterceptTouchEvent: UP super false" );
                return false;

            default: Log.i("VerticalScrollview", "onInterceptTouchEvent: " + action ); break;
        }

        return false;
    }

    @Override
    public boolean onTouchEvent(MotionEvent ev) {
        super.onTouchEvent(ev);
        Log.i("VerticalScrollview", "onTouchEvent. action: " + ev.getAction() );
        return true;
    }
}

xml файл макета:

<com.core.views.VerticalScrollview
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:overScrollMode="never">

        //YOUR VIEWS

</VerticalScrollview>
...