Android: no se puede hacer clic en el elemento dentro de RecyclerView después de desplazarse
Acabo de actualizar a la API 26 y la biblioteca de soporte 26.0.2. Pero descubrí que miRecyclerView
No se puede hacer clic en los elementos justo después del desplazamiento. Si espera un segundo, funcionará. Pero si hace clic en el elemento inmediatamente, no lo hará. Incluso si losRecyclerView
no se desplaza en absoluto (por ejemplo, se desplaza hacia arriba).
Cuando bajé para admitir la biblioteca 25.4.0, todo vuelve a funcionar bien. El punto clave es que miRecyclerView
está en unCoordinatorLayout
y tiene unSCROLL_FLAG_SCROLL
bandera en miToolbar
delAppBarLayout
. Si no uso esta bandera, este problema desaparecerá. Así que creo que es un cambio de comportamiento oculto de la biblioteca de soporte 26.
He intentado agregarfocusable="false"
alCoordinatorLayout
pero aun así no tuve suerte.
¿Hay alguna forma de deshabilitar este comportamiento? Porque es realmente molesto hacer clic dos veces para activar el evento de clic.
<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>
EDITAR
Creo que el problema es elscrollState
delRecyclerView
. Cuando se detiene el desplazamiento, no se cambia aSCROLL_STATE_IDLE
inmediatamente. Buscando en el código fuente deRecyclerView
, Encontré que hay unViewFlinger
controlando el estado de desplazamiento. Cuando giro hacia abajo para desplazarme hacia la parte superior, no está llamandosetScrollState(SCROLL_STATE_IDLE)
inmediatamente, en cambio, espera un momento para activar este método. Cuanto más rápido lanzo, más tiempo necesito esperar. Es como si RecyclerView todavía se desplazara en segundo plano. Porque elscroller.isFinished()
no devuelve cierto justo después de laRecyclerView
deja de desplazarte cuando toca la parte superior. Tal vez es un error delRecyclerView
cuando está en unCoordinatorLayout
.