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.

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.

Puede lograr esto de dos maneras:

  1. llamar al método smoothScrollToPositionFromTop
  2. 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).

  • La posición de la vista de lista se cambia al desplazarse en android
  • Android: Haga que la vista en la parte superior de la lista desplaza junto con la vista de lista
  • Android - NumberPicker desplazamiento / fling más rápido
  • Cómo hacer que AppBarLayout desaparezca por completo con windowTranslucentStatus establecido en true
  • Android - HorizontalScrollView - obtener la vista en foco (o índice de la misma)
  • Moondroid Coverflow Desplazarse sólo entre el primer y el último objeto
  • El girador se desplaza hacia arriba cuando está encendidoPulse o desplaza lentamente
  • Control de dos ViewPager juntos
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.