Android – ¿cuál es el significado de StableIDs?

Estoy implementando un ListAdapter de ExpandableListView, mientras trabajo veo que necesito overide la función booleana hasStableIds (). ¿Puede alguien explicar por favor cuál es el significado de los IDs estables? Cuando necesito esto

Las identificaciones estables permiten que ListView optimice para el caso en que los elementos permanezcan iguales entre notifyDataSetChanged llamadas notifyDataSetChanged . Los ID a los que se refiere son los que se devuelven de getItemId .

Sin ella, el ListView tiene que recrear todas las View , ya que no puede saber si los ID de elemento son iguales entre los cambios de datos (por ejemplo, si el ID es sólo el índice de los datos, tiene que volver a crearlo todo). Con él, puede abstenerse de recrear View s que mantuvieron sus ID de artículo.

Si hasStableIds() devuelve false, cada vez que llame a notifyDataSetChanged() su adaptador verá el valor devuelto de getItemId y eventualmente llamará getView(int position, View convertView, ViewGroup parent) sólo para miles de elementos que id ha cambiado.

Utilizando esta técnica, puede actualizar fácilmente sólo un elemento en el ListView

Si implementa getItemId correctamente, entonces podría ser muy útil.

Ejemplo:

Tienes una lista de álbumes:

 class Album{ String coverUrl; String title; } 

E implementas getItemId como este:

 @Override public long getItemId(int position){ Album album = mListOfAlbums.get(position); return (album.coverUrl + album.title).hashCode(); } 

Ahora, su ID de elemento depende de los valores de coverUrl y de los campos de título y si los cambia y llama a notifyDataSetChanged() en su adaptador, el adaptador llamará al método getItemId () de cada elemento y actualizará sólo aquellos elementos que ha cambiado.

Esto es muy útil si estás haciendo algunas operaciones "pesadas" en tu getView() .

  • ¿Cómo puedo usar un listview sin extender ListActivity en mi clase?
  • Cómo mantener la vista de lista para mostrar la última fila
  • Implementar la sección ListView con la casilla de verificación?
  • Android: Desactivar la carga perezosa de listview
  • Obtención de datos almacenados de la base de datos en ListView.
  • Añadir imagen de perfil a la vista de lista en el cajón de navegación
  • State_activated en pre Honeycomb Devices
  • ¿Añade nuevos elementos a la parte superior de la vista de lista en Android?
  • Android: Cómo configurar el evento onClick para el botón en el elemento de lista de ListView
  • Android: setselector color para listview no funciona
  • Cómo crear listview con categorías / segmentos?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.