Vista de lista Desplácese hasta el final de la lista después de actualizar la lista

Me gustaría asegurarme de que la lista se despliega hasta el final, después de haber actualizado la vista de lista usando listAdapter, para que muestre el último elemento ingresado en la lista. Cómo puedo hacer esto ?

Intenté esto pero no tuve suerte:

lv.setTranscriptMode(ListView.TRANSCRIPT_MODE_ALWAYS_SCROLL); 

gracias

Suponiendo que sepa cuándo han cambiado los datos de la lista, puede indicar manualmente a la lista que se desplace hasta el final configurando la selección de la lista en la última fila. Algo como:

 private void scrollMyListViewToBottom() { myListView.post(new Runnable() { @Override public void run() { // Select the last row so it will scroll into view... myListView.setSelection(myListAdapter.getCount() - 1); } }); } 

Necesita usar estos parámetros en su vista de lista:

  • Desplazarse lv.setTranscriptMode(ListView.TRANSCRIPT_MODE_ALWAYS_SCROLL);

  • Establezca el encabezado de la lista en la parte inferior lv.setStackFromBottom(true);

También puede establecer estos parámetros en XML, ej. Me gusta esto:

  

En su diseño xml, establezca los siguientes parámetros para la vista de lista.

 android:stackFromBottom="true" android:transcriptMode="alwaysScroll" 

¡¡¡Aclamaciones!!!

Una combinación de TRANSCRIPT_MODE_ALWAYS_SCROLL y setSelection me hizo funcionar

 ChatAdapter adapter = new ChatAdapter(this); ListView lv = (ListView) findViewById(R.id.chatList); lv.setTranscriptMode(AbsListView.TRANSCRIPT_MODE_ALWAYS_SCROLL); lv.setAdapter(adapter); adapter.registerDataSetObserver(new DataSetObserver() { @Override public void onChanged() { super.onChanged(); lv.setSelection(adapter.getCount() - 1); } }); 

He tenido éxito al usar esto en respuesta a un clic de botón, así que supongo que también puedes usarlo después de actualizar tus contenidos:

 myListView.smoothScrollToPosition(theListAdapter.getCount() -1); 

Usando: Establezca el encabezado de la lista en la parte inferior lv.setStackFromBottom(true);

Funcionó para mí y la lista se desplaza hacia abajo automáticamente cuando aparece por primera vez en la visibilidad. La lista se desplaza como debería con TRANSCRIPT_MODE_ALWAYS_SCROLL .

Para obtener esto en un ListFragment:

 getListView().setTranscriptMode(ListView.TRANSCRIPT_MODE_ALWAYS_SCROLL); getListView().setStackFromBottom(true);` 

Agregué esta respuesta porque si alguien hace una búsqueda en Google por el mismo problema con ListFragment, solo lo encuentra.

Saludos

yo suelo

 setTranscriptMode(ListView.TRANSCRIPT_MODE_NORMAL); 

para agregar entradas en la parte inferior, y las entradas más antiguas se desplazan fuera de la parte superior, como una transcripción de chat

El modo de transcripción es el que desea y es utilizado por Google Talk y la aplicación SMS / MMS. ¿Está llamando correctamente a notifyDatasetChanged () en su adaptador cuando agrega elementos?