Android: stackFromBottom = "true" no parece funcionar perfectamente (revertir ListView con el adaptador)

Ok, déjame explicar lo que "no funciona perfectamente" significa.

Tengo un listview sin el android:stackFromBottom="true" parámetro. También tengo un ArrayAdapter con el getItem(position) regular getItem(position) . Llamo a mi servidor web, obtener los datos en un orden de fecha asc.

De esta manera el elemento en la posición 0 (arriba) de la lista tiene la fecha más pequeña. Y puedo desplazarme de arriba a abajo. Bueno.

He añadido android:stackFromBottom y ahora veo que ahora puedes empezar a escudarse desde abajo-> arriba, pero el elemento en la posición 0 sigue siendo el elemento superior y tiene la fecha más pequeña. Así que el adaptador no ha cambiado su orden.

La única manera de resolver esto es cambiar getItem(getCount()-1-position) dentro del adaptador. Sin embargo agrego y notifico el adaptador y el adaptador todavía agregará los artículos a la parte inferior.

Supongo que la estructura es ListView -> Adapter -> Row Views por lo que no importa el valor stackFromBottom , sólo hay un hijo, el adaptador. ¿Derecha?

De todos modos, ¿cómo puede tener un ListView con el adaptador en orden inverso?

Una manera elegante agradable de hacer esto es Adapter.getItem() su método de Adapter.getItem() para volver los artículos ellos mismos en orden inverso.

Este es un buen patrón para un Adapter ya que no requiere que sus datos se clasifiquen de forma diferente sólo con fines de visualización (podría haber sobrecarga en la clasificación de la lista o alguna otra razón por la que el pedido original es importante en otra parte de la aplicación) .

En su lugar, es el adaptador que muestra el cambio sin afectar al conjunto de datos subyacente.

Aquí es lo que usé:

 @Override public MyListItemClass getItem(int position) { return super.getItem(getCount() - 1 - position); } 

Esto se basa en la respuesta de @ mes a esta pregunta relacionada:

  • Mostrar nuevos elementos en la parte superior de un ListView

Echa un vistazo a ese hilo para alguna discusión sobre otras posibles soluciones.

He sobreestimado el android:stackFromBottom power. Lo que básicamente hace es similar a la "gravedad: fondo". No agrega los elementos en orden inverso, pero sólo hace que el contenido alineado a la parte inferior de la lista.

Todavía estoy buscando una solución de adaptador inverso.

Tal vez u debe utilizarlo con AbsListView.setTranscriptMode (int); Tengo una aplicación de chat y ofrezco dos modos de mostrar la conversación – desde abajo o desde arriba usando AbsListView.setStackFromBottom (boolean);

  LinearLayoutManager mLinearLayoutManager = new LinearLayoutManager(Application.get()); mLinearLayoutManager.setStackFromEnd(true); mLinearLayoutManager.setReverseLayout(true); list.setLayoutManager(mLinearLayoutManager); 

Pruebe esta esperanza esto le ayudará.

Sugeriría para utilizar el comparador para volver el objeto basado en la fecha en la cual orden siempre que usted quiere. Si lo hace, se asegurará de que los datos estén siempre en el orden en que desea y no en lo que el servidor envía. Puedes comprobar cómo usar ordenar aquí

  • Después de mantener el estado de colapso / expansión para nivel N o Multinivel lista ampliable algunos subgrupos no se muestran
  • Actividad refrescante al recibir la notificación de gcm push
  • Cómo establecer la altura de filas ListView
  • Android ListView: cómo seleccionar un elemento?
  • Android: Eliminación de elementos de una actividad ListView / ArrayAdapter
  • Cómo extender AdapterView para comportarse como LinearLayout llenado dinámicamente por un adaptador
  • Centrarse en EditText en ListView cuando los descendientes de bloque (Android)
  • Android: requestLayout () incorrectamente llamado
  • Cómo mostrar datos de la lista Array a Custom ArrayAdapter
  • ¿Cómo puedo probar ListView con Robolectric 2.2? Dice que android.widget.ListView todavía no está implementado
  • Android "más suave" ocultación de la barra de herramientas al desplazarse
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.