Estoy buscando una manera de desplazarme RecyclerView
para mostrar el elemento seleccionado en la parte superior.
En una ListView
, pude hacer eso usando scrollTo(x,y)
y obteniendo la parte superior del elemento que necesita ser centrado.
Algo como:
@Override
public void onItemClick(View v, int pos){
mylistView.scrollTo(0, v.getTop());
}
El problema es que RecyclerView
devuelve un error al usar su scrollTo
método diciendo
RecyclerView no admite el desplazamiento a una posición absoluta
¿Cómo puedo desplazar a RecyclerView
para colocar el elemento seleccionado en la parte superior de la vista?
fuente
Si está buscando el LinearLayout Manager vertical, puede lograr un desplazamiento suave usando una costumbre
LinearSmoothScroller
:use una instancia del administrador de diseño en la vista de reciclaje y luego la llamada
recyclerView.smoothScrollToPosition(pos);
se desplazará suavemente a la posición seleccionada en la parte superior de la vista de recicladorfuente
getHorizontalSnapPreference()
anulo en TopSnappedSmoothScroller para listas horizontales.RecyclerView
? Es decir: esto no parece funcionar para el último elemento, independientemente deSNAP_TO_START
losRecyclerView
únicos desplazamientos hasta que el elemento sea visible en la parte inferior pero no lo mueva completamente hacia arriba. ¿Alguna idea de cómo lograr esto? (He trabajado alrededor de esto al configurar un relleno personalizado en elRecyclerView
pero eso no parece realmente correcto ...)// Elemento de desplazamiento pos
fuente
Solo necesitas llamar
recyclerview.scrollToPosition(position)
. ¡Esta bien!Si desea llamarlo en el adaptador, simplemente deje que su adaptador tenga la instancia de recyclerview o la actividad o fragmento que contiene recyclerview, que implementa el método
getRecyclerview()
en ellos.Espero que te pueda ayudar.
fuente
lo mismo con el regulador de velocidad
fuente
Prueba lo que funcionó para mí genial!
Crea una variable
private static int displayedposition = 0;
Ahora para la posición de su RecyclerView en su actividad.
Coloque esta declaración donde desee que coloque el sitio anterior que se muestra en su vista.
Bueno, eso es todo, funcionó bien para mí
fuente
simplemente llame a este método simplemente:
en vez de:
fuente
Lo que hice para restaurar la posición de desplazamiento después de actualizar RecyclerView al hacer clic en el botón:
obtener el desplazamiento del primer elemento visible desde la parte superior antes de crear el objeto linearLayoutManager y después de instanciarlo, se llamó al scrollToPositionWithOffset del objeto LinearLayoutManager.
fuente
No sé por qué no encontré la mejor respuesta, pero es realmente simple.
Sin errores
Crea animaciones
fuente
desplazarse en una posición particular
y esto me ayudó mucho. por clic oyente puede obtener la posición en su adaptador
fuente
fuente
Ninguna de las respuestas explica cómo mostrar los últimos elementos en la parte superior. Por lo tanto, las respuestas funcionan solo para los elementos que todavía tienen suficientes elementos encima o debajo de ellos para completar el resto
RecyclerView
. Por ejemplo, si hay 59 elementos y se selecciona un 56º elemento, debe estar en la parte superior como en la imagen a continuación:Podríamos manejar esos casos, utilizar
linearLayoutManager.scrollToPositionWithOffset(pos, 0)
y una lógica adicional enAdapter
deRecyclerView
- mediante la adición de un margen de encargo del último artículo (si el último elemento no es visible, entonces significa que hay suficiente espacio en el rellenoRecyclerView
). El margen personalizado podría ser una diferencia entre la altura de la vista raíz y la altura del elemento. Entonces, suAdapter
forRecyclerView
se vería de la siguiente manera:fuente
En mi caso,
RecyclerView
tengo un top acolchado como esteLuego, para desplazar un elemento hacia arriba, necesito
fuente
Si
LayoutManager
es tuLinearLayoutManager
lo usasscrollToPositionWithOffset(position,0);
y hará que tu elemento sea el primer elemento visible de la lista. De lo contrario, puede usarsmoothScrollToPosition
enRecyclerView
directamente.Terminé usando el siguiente código.
fuente
Utilizo el siguiente código para desplazar suavemente un elemento (thisView) a la parte superior.
Funciona también para GridLayoutManager con vistas de diferentes alturas:
Parece funcionar lo suficientemente bien como para una solución rápida.
fuente
thisPosition
?