https://gist.github.com/chrisbanes/8391b5adb9ee42180893300850ed02f2
ько что обновил до API 26 и поддержки библиотеки 26.0.2. Но я обнаружил, что мойRecyclerView
элементы не кликабельны сразу после прокрутки. Если вы подождите секунду, это будет работать. Но если вы щелкнете по элементу немедленно, он не будет. Даже еслиRecyclerView
не прокручивается вообще (например, прокручивается до самого верха).
Когда я перешел на поддержку библиотеки 25.4.0, все снова пошло хорошо. Ключевым моментом является то, что мойRecyclerView
находится вCoordinatorLayout
и имеетSCROLL_FLAG_SCROLL
флаг на моемToolbar
изAppBarLayout
, Если я не использую этот флаг, то эта проблема исчезнет. Так что я думаю, что это скрытое изменение поведения библиотеки поддержки 26.
Я пытался добавитьfocusable="false"
кCoordinatorLayout
но все равно не повезло.
Есть ли способ отключить это поведение? Потому что действительно раздражает дважды щелкнуть, чтобы вызвать событие щелчка.
<android.support.design.widget.CoordinatorLayout
android:id="@+id/coordinateLayout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.design.widget.AppBarLayout
android:id="@+id/fragmentAppBar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:elevation="0dp"
android:background="@null">
<include
android:id="@+id/dynamicActionBarHolder"
layout="@layout/dynamic_action_bar"/>
</android.support.design.widget.AppBarLayout>
<android.support.v4.widget.SwipeRefreshLayout
android:id="@+id/pullToRefreshMailRecycler"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<android.support.v7.widget.RecyclerView
android:id="@+id/mailRecyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</android.support.v4.widget.SwipeRefreshLayout>
</android.support.design.widget.CoordinatorLayout>
РЕДАКТИРОВАТЬ
Я думаю, что проблема заключается вscrollState
изRecyclerView
, Когда он остановлен, он не изменяется наSCROLL_STATE_IDLE
немедленно. Глядя в исходный кодRecyclerView
Я нашел тамViewFlinger
управление состоянием прокрутки. Когда я бегу вниз, чтобы прокрутить вверх, это не звонитsetScrollState(SCROLL_STATE_IDLE)
вместо этого он ждет некоторое время, чтобы запустить этот метод. Чем быстрее я кидаюсь, тем больше времени мне нужно ждать. Это так же, как RecyclerView все еще прокручивается в фоновом режиме. Посколькуscroller.isFinished()
не возвращает истину сразу послеRecyclerView
прекратить прокрутку, когда он коснулся вершины. Может быть, это ошибкаRecyclerView
когда это вCoordinatorLayout
.