¿Cuál es el propósito de item-id en Android ListView Adapter?
(No es específico para ListView, sino para el adaptador).
Sigo implementando esto cuando subclase BaseAdapter:
- android detecta si el usuario ha rozado
- ¿Cómo rastrear la posición de un dispositivo Android en un edificio?
- Android: ¿Cómo obtener el actual desplazamiento X de RecyclerView?
- Android Web App: Posición: fijo roto?
- Adición dinámica de un niño a LinearLayout con la obtención de la posición de cada niño
@Override public long getItemId(int position) { return position; }
Porque tienen que implementar eso. No veo ningún uso de él, necesito getItem (posición) solamente, no getItemId (posición).
Me pregunto si tiene alguna importancia (a Android SDK o algo más)?
- La posición no funciona en el navegador móvil
- Establecer la posición del cursor de edición de texto en función de la posición de toque del usuario Android
- getSelectedItemPosition () de un spinner siempre devuelve 0
- ¿Configurar el pulgar en una posición particular (no en el desplazamiento) de seekbar mediante programación?
- Establecer la posición absoluta de una vista
- Smooth Scroll para GridView
- Obtener la ubicación secundaria en HorizontalScrollView y desplácese hasta ella
- Android: Utilizar el elemento seleccionado en AutoCompleteTextView para rellenar otro campo
Probablemente haya muchas razones para tener ID de artículo estable . No se puede dar una implementación predeterminada ya que depende del tipo de objeto que se almacena en el adaptador.
Android tiene una comprobación para asegurarse de que los ID de artículo se utilizan sólo cuando están establecidos, es decir, la subclase ha reemplazado adecuadamente getItemId
; BaseAdapter.hasStableIds debe ser reemplazado para devolver true.
Pocas razones por las que me he encontrado:
-
El método
onItemClick(AdapterView<?> parent, View view, int position, long id)
también envíalong id
-
The result is only valid if the choice mode has not been set to CHOICE_MODE_NONE and the adapter has stable IDs.
método getCheckedItemIdsThe result is only valid if the choice mode has not been set to CHOICE_MODE_NONE and the adapter has stable IDs.
Respuesta a "Porque tiene que implementar que" : no tiene que Si no utiliza las características, no hay necesidad. Pero si lo hace, no olvide reemplazar boolean hasStableIds()
también.
Imagine esta estructura:
Usted tiene notas de la tabla del db con tales 3 expedientes:
+----+--------------------------+ | ID | Note Text | +----+--------------------------+ | 43 | Note text blah blah | | 67 | Note text blah blah blah | | 85 | Last note | +----+--------------------------+
Y se implementa un adaptador para servir estos datos.
Ahora vamos a ver qué posición e identificador de artículo están en tal caso
Position – es un número ordinal de posición de registro en el conjunto de datos cargado. Por ejemplo, si carga esa tabla con ORDER BY ID ASC
, entonces
- El registro con ID 43 tendrá la posición 0 ,
- El registro con ID 67 tendrá la posición 1 ,
- Registro con ID 85 tendrá la posición 2
ItemId – es una "clave primaria" de un registro, y su implementación puede devolver dichos valores
- Registro con ID 43 debería tener itemId 43 ,
- Registro con ID 67 debería tener itemId 67 ,
- Registro con ID 85 debe tener itemId 85
Position y itemId en adaptadores estándar de Android
ArrayAdapter / SimpleAdapter
En ArrayAdapter
y SimpleAdapter
posición y itemId es la misma cosa:
public long getItemId(int position) { return position; }
SimpleCursorAdapter (y todos los tipos que heredan de CursorAdapter)
En el SimpleCursorAdapter y todos los descendientes de CursorAdapter itemId es un valor de la columna _id :
public long getItemId(int position) { if (mDataValid && mCursor != null) { if (mCursor.moveToPosition(position)) { return mCursor.getLong(mRowIDColumn); } else { return 0; } } else { return 0; } }
Como @Reno escribe, le permite asignar filas en la vista a elementos de conjunto de datos.
Uno de los propósitos de esto es permitir ListViews para realizar un seguimiento de qué elemento está seleccionado, incluso si las posiciones en la lista se cambian o se actualizan los datos subyacentes.
Si subclases ArrayAdapter en su lugar, es posible que no tenga que implementar ese método.
En general, encuentro que el método es útil para determinar qué fila se ha hecho clic durante eventos onClick y utilizar ese ID como parte de los extras de Intent pasados a la siguiente actividad.
Sí, es una función abstracta llamada por android para asignar el ID de fila del conjunto de datos del adaptador a la posición de la lista.
Le invitamos a profundizar
- Fondo blanco bajo el cuadro de diálogo de alerta
- El host de destino no debe ser nulo o configurado en parámetros