Вложенное 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" представляет собой сложный макет, который я не хотел публиковать здесь, так как он значительно расширяет код.
когда я переключаюсь между вкладками, он прокручивает пролив к виду ресайклера. Заголовок скрыт, мне нужно прокрутить вверх, чтобы увидеть его.
Любые идеи о том, что вызывает это? Я не хочу использовать тип в моем адаптере, если я могу его избежать.
Ответы
Ответ 1
Как сказал Harshit на Android предотвращает автоматическое перепозиционирование вложенного recyclerview
вы можете добавить этот атрибут в свой линейный макет. Линейная компоновка прямой дочерний элемент вашего scrollView.
android:descendantFocusability="blocksDescendants"
Это помогло мне.
Ответ 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