Cómo hacer que la vista de lista se desplace hasta que el último elemento esté en la parte superior de la pantalla
Estoy desarrollando una aplicación que necesita mostrar calendario de agenda, al igual que la agenda en el calendario nativo. Tengo una vista de lista que muestra diferentes eventos (Nota: en el contexto de la pregunta los eventos es la entidad de mi sistema). Quiero proporcionar un botón "Hoy" en esta pantalla. Cuando el usuario hace clic en este botón, se supone que los eventos se desplazarán hasta que el primer evento de la programación del día actual esté en la parte superior de la pantalla. El problema se produce cuando sólo tengo unos pocos eventos programados a partir de hoy – tan pocos que no llenan una pantalla completa. A continuación, la vista de lista se desplaza hasta que el último evento del calendario esté en la parte inferior. Esto generalmente significa que el efecto deseado de tener el primer evento de hoy en la parte superior no se logra.
¿Alguna sugerencia de cómo se puede hacer esto? He pensado en agregar algunos elementos en blanco al final, pero esto parece una solución fea, y además requerirá cálculos especiales específicos del dispositivo que me dirán cuántos elementos insertar.
- Android RecyclerView desplazamiento suave para ver que está animando su altura
- Desplazarse por una vista y actualizar el contenido
- Android ListView scrollTo
- Utilizar smoothScrollTo en Fragmento
- Cómo hacer el nuevo efecto de paralaje de PlayStore
Editar :
Añadir un código como se solicitó en el comentario
En realidad no estoy seguro de que este código sorprenderá a nadie, pero:
public void onTodayClicked(View target) { // calculate the indexOf. It works and is not related to the question if (indexOf >= 0) { ListView list = (ListView) findViewById(R.id.events_list_view); list.setSelection(indexOf); } }
No estoy seguro de que la definición de la disposición es importante para ayudar a responder la pregunta, pero si usted piensa así que puedo añadirla también.
- Efecto de desplazamiento de Android (aplicación Google I / O)
- ¿Cómo hacer Pan automático (desplazamiento) con AChartEngine gráfico de línea dinámica junto con el eje X?
- ¿Es posible agregar un TextView desplazable a un ListView?
- Vista de lista Scroll Not Smooth
- ¿Cómo desplazar ListView a la parte inferior?
- Título de Autoscrollable en Android Actionbar (Marquee)
- SeekBar dentro de DrawerLayout
- ¿Cómo evito completamente que TextView se desplace?
Puede lograr esto de dos maneras:
- llamar al método smoothScrollToPositionFromTop
- método setSelectionFromTop de llamada
Usar el método smoothScroll es mejor, porque realmente hace la transición suavemente – eso significa que realmente se desplaza a ella. El único inconveniente es que sólo está disponible después del nivel 11 de la API.
El método setSelectionFromTop funciona desde el nivel 1 de la API, pero en lugar de desplazarse sin problemas, salta a la fila.
Si no necesita posicionarse en la parte superior de la pantalla, sólo para ver la fila, también puede utilizar smoothScrollToPosition, que es una llamada al nivel 8 de la API.
Si le das a estos métodos la posición, que es la PRIMERA en la lista, funcionarán bien. (De su descripción, creo que probablemente calcular la última posición, pero no puedo estar seguro).