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
- Creación de ListView mediante programación
- Iniciar nueva actividad en el elemento de vista de lista de clics
- Establecer el elemento activado en ListView mediante programación
- Androide. RadioButtons en un ListView
- Agregar o quitar encabezado y pie de página dinámicamente
- Seleccione sólo un botón de radio a la vez en la vista de lista personalizada, android
- Para un adaptador ListView, ¿cómo se llama getView ()?
- Todavía otro getView llamado varias veces
- Encabezados ListView de Android
- ANDROID: Agregar espacio vacío al final de ListView
- Hacer un ListView rebotando en Android
- Parece que no se puede visualizar un ListView y un AdView al mismo tiempo
- Ancho del área seleccionable en ListView w / onListItemClick
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()
.
- Res \ layout \ Contact_us.xml: Nombre de archivo no válido: debe contener sólo
- Adb shell su funciona, pero la raíz adb no