Intereting Posts
Установить растровое изображение на фон ImageView с помощью метода imageView.setImageBitmap Как определить, отображается ли раскрывающееся меню выше или ниже счетчика в андроиде? Как отобразить окно телефонных звонков при нажатии на телефонный номер телефона Как избежать черного экрана, когда Intent.FLAG_ACTIVITY_NEW_TASK | Установлен Intent.FLAG_ACTIVITY_CLEAR_TASK? Сокращение файла .jar для облегчения приложения Android Xlarge vs sw720dp путают размер экрана Как изменить цвет по умолчанию на вкладку Командная строка ADB Подвешивание во время установки (PhoneGap) Не получить большой палец с жанрами – Универсальный музыкальный проигрыватель Динамическое создание байт-кода Dalvik в запущенном приложении Dalvik / Android Как делиться текстом и изображением в Google Plus (G +) с андроидом без использования намерения? Создайте меню стиля «ok glass», в стеке Push-уведомления с помощью GCM на Android Как изменить иконки меню навигации и переполнения панели инструментов (appcompat v7)? Попытка инициализировать аппаратное ускорение вне основного потока, прерывание

RecyclerView внутри SwipeRefreshLayout внутри NestedScrollViewLayout не может прокручиваться

У меня есть активность с рушащейся панелью инструментов и вложенным представлением прокрутки с помощью FrameLayout которые я FrameLayout фрагменты. Первоначально я размещаю в нем FragmentA с CardView .

Прекрасно работает. Когда я нажимаю кнопку, хотя я заменяю FragmentB другим, содержащим RecyclerView .

Когда я добавляю FragmentB я наклоняю прокрутку в нижней части списка.

Это видео показывает проблему: LINK TO VIDEO

Схема расположения хостов:

 <android.support.design.widget.AppBarLayout android:id="@+id/appbar" android:layout_width="match_parent" android:layout_height="340dp" android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" android:fitsSystemWindows="true"> <android.support.design.widget.CollapsingToolbarLayout android:id="@+id/collapsing_toolbar" android:layout_width="match_parent" android:layout_height="match_parent" app:layout_scrollFlags="scroll|exitUntilCollapsed|enterAlwaysCollapsed" android:fitsSystemWindows="true" app:contentScrim="?attr/colorPrimary" app:expandedTitleMarginStart="48dp" app:expandedTitleMarginEnd="64dp"> ......... ...... </android.support.design.widget.CollapsingToolbarLayout> </android.support.design.widget.AppBarLayout> <android.support.v4.widget.NestedScrollView android:layout_width="match_parent" android:layout_height="match_parent" android:layout_gravity="fill_vertical" android:fillViewport="true" app:layout_behavior="@string/appbar_scrolling_view_behavior" > <!-- the layout which will be the content of the activity (which will be hosted inside the drawer (NOT the list of the drawer)) --> <FrameLayout android:id="@+id/frame_container" android:layout_width="match_parent" android:layout_height="wrap_content" app:layout_behavior="@string/appbar_scrolling_view_behavior" > </FrameLayout> </android.support.v4.widget.NestedScrollView> 

Макет FragmentB:

 <android.support.v4.widget.SwipeRefreshLayout android:id="@+id/contentView" android:layout_width="match_parent" android:layout_height="wrap_content" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:android="http://schemas.android.com/apk/res/android" app:layout_behavior="@string/appbar_scrolling_view_behavior"> <android.support.v7.widget.RecyclerView android:id="@+id/rv_users" app:layout_behavior="@string/appbar_scrolling_view_behavior" android:layout_width="match_parent" android:layout_height="wrap_content" /> <include layout="@layout/view_progress" /> <include layout="@layout/view_retry" /> <!--</LinearLayout>--> </android.support.v4.widget.SwipeRefreshLayout> 

Вы помещаете RecyclerView внутри NestedScrollView .
Я думаю, лучшее решение – иметь NestedScrollView или RecyclerView но не оба, потому что RecyclerView уже реализует NestedScrollingChild .

У меня похожая компоновка в моем приложении. Я сделал то же самое – поместите RecyclerView в FrameLayout, а затем внутри NestedScrollView. Это прекрасная работа. Без NestedScrollView все работает нормально.

Я думаю, что это проблема с прокруткой, customview расширяет ListView или RecycleView. Это мой зол:

 public class RewriteListView extends ListView { public RewriteListView(Context context) { super(context); } public RewriteListView(Context context, AttributeSet attrs) { super(context, attrs); } public RewriteListView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST); super.onMeasure(widthMeasureSpec, expandSpec); } 

}

будь счастлив 🙂

Уже ответили! Два прокручиваемых элемента (например, RecycleView и NestedScrollView в вашем вопросе) не могут работать вместе.

Измените макет своей деятельности.

 <ParentLayout> ....... <android.support.design.widget.AppBarLayout android:id="@+id/appbar" android:layout_width="match_parent" android:layout_height="340dp" android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" android:fitsSystemWindows="true"> <android.support.design.widget.CollapsingToolbarLayout android:id="@+id/collapsing_toolbar" android:layout_width="match_parent" android:layout_height="match_parent" app:layout_scrollFlags="scroll|exitUntilCollapsed|enterAlwaysCollapsed" android:fitsSystemWindows="true" app:contentScrim="?attr/colorPrimary" app:expandedTitleMarginStart="48dp" app:expandedTitleMarginEnd="64dp"> ......... ...... </android.support.design.widget.CollapsingToolbarLayout> </android.support.design.widget.AppBarLayout> //THIS FRAGMENT WILL BE REPLACED! <FrameLayout android:id="@+id/frame_container" android:layout_width="match_parent" android:layout_height="wrap_content" app:layout_behavior="@string/appbar_scrolling_view_behavior" > </FrameLayout> ....... </ParentLayout> 

И чем по умолчанию в первом запуске этого действия – заменил FrameLayout выше – на ваш первый фрагмент с помощью NestedScrollView (вам нужно создать новый фрагмент для замены) и после замены щелчка на фрагмент в вашем Вопросе.

Две вещи:

Прежде всего, вам не нужно встраивать свой контейнер фрагмента в NestedScrollView если вы хотите прокручивать поведение в своей деятельности.

Поместите FrameLayout прямо в макет координатора с атрибутом layout_behavior в нем, а затем просто поместите любой фрагмент с прокруткой View (и ему не нужно иметь layout_behavior attr).

Итак, в вашем примере вам придется обрезать фрагменты:

FragmentA который имеет макет с CardView внутри NestedScrollView FragmentB с RecyclerView внутри SwipeRefreshLayout

Другая проблема заключается в том, что вы помещаете более одного ребенка в SwipeRefreshLayout , и, как указано в документации, у него должен быть только один прямой ребенок. источник