He estado jugando mucho con un problema que he tenido. Lo que sucede es que cada vez que se agrega un elemento a mi lista de lista (adaptador), espero que se desplace automáticamente si estoy en el último elemento (lo cual hará hasta cierto punto); SIN EMBARGO, si se agregan 3 o más elementos a la vez, no se desplazará automáticamente.¿Por qué android: transcriptMode = "normal" no funciona correctamente?
Aquí es el XML de esa vista de lista:
<ListView android:id="@android:id/list"
android:layout_width="fill_parent"
android:layout_height="0dip"
android:layout_weight="1"
android:transcriptMode="normal"/>
que intentaron una solución usando un fragmento encontré here.
Mi código es el siguiente:
public void addChat(final String text, final String username) {
this.runOnUiThread(new Runnable() {
public void run() {
globals.chatAdapter.add(DateFormat.format("hh:mmaa", Calendar.getInstance()).toString(), username, text);
globals.chatAdapter.notifyDataSetChanged();
int lastP = getListView().getLastVisiblePosition();
int count = globals.chatAdapter.getCount() - 1;
if (lastP == globals.chatAdapter.oldP || lastP == -1) {
getListView().setSelection(count);
}
globals.chatAdapter.oldP = count;
}
});
}
El problema con esto es cuando un grupo de artículos vienen en una vez, getListView() getLastVisiblePosition() no se actualizará de inmediato causando una setSelection() a. nunca se llama, y por lo tanto no se desplaza automáticamente.
¿Alguna sugerencia?
Hola, gracias por esto, yo estaba teniendo el mismo problema y esto lo arreglaron :) Una pregunta rápida, qué dejó ningún ajuste en su transcriptMode XML? –
Para el código que está etiquetado como "CÓDIGO VIEJO" agregué una configuración de TranscriptMode en el XML, pero para el código después de la edición no lo hice. (Es por eso que cambié el código para eliminar mi configuración inicial de XML) – BCS