Вложенное scrollview + recyclerview, странное поведение autoscroll

В представлении pager у меня есть несколько фрагментов, один из них использует вложенное scrollview с заголовком и recyclerview:

<android.support.v4.widget.NestedScrollView
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/scrollview"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fillViewport="true"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    tools:context="com.m360.android.fragment.Members.MemberDetailsFragment">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:paddingTop="20dp">

        <header/>

        <android.support.v7.widget.RecyclerView
            android:id="@+id/recycler"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:clipToPadding="false"
            android:paddingTop="0dp" />

    </LinearLayout>

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

Тег "header" представляет собой сложный макет, который я не хотел публиковать здесь, так как он значительно расширяет код.

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

Любые идеи о том, что вызывает это? Я не хочу использовать тип в моем адаптере, если я могу его избежать.

Ответ 2

У нас есть аналогичная проблема. У нас есть вертикаль RecyclerView. Каждый элемент этой вертикали RecyclerView содержит горизонтальный RecyclerView, как в приложении Android TV.

Когда мы обновили файлы поддержки с 23.4.0 до 24.0.0, неожиданно появился автоматический свиток. В частности, когда мы открываем Activity, а затем возвращаемся назад, вертикальный RecyclerView прокручивается так, что текущая горизонтальная строка RecyclerView не обрезается, и строка отображается полностью.

Добавление android:descendantFocusability="blocksDescendants" устраняет проблему.

Однако я нашел другое решение, которое также работает. В нашем случае вертикаль RecyclerView содержится внутри a FrameLayout. Если я добавлю android:focusableInTouchMode="true" к этому FrameLayout, проблема исчезнет.

Здесь даже упоминается третье решение , которое в основном состоит в вызове setFocusable(false) для дочернего/внутреннего RecyclerView s. Я не пытался это сделать.

Кстати, в AOSP есть открытая проблема .

Ответ 3

setFocusableInTouchMode=true для дочернего макета (может быть LinearLayout) NestedScrollView