¿Cuál es la diferencia entre argumento "int" y "long" en onItemClick en Android

Cuando implementamos OnItemClickListener , tenemos que implementar el método onItemClick que es un método abstracto en la interfaz OnItemClickListener . En el método onItemClick hay cuatro argumentos.

 public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { Toast.makeText(this, "Clicked on : " + arg2 + " long arg : " + arg3, Toast.LENGTH_LONG).show(); } 

Lo que necesito saber es la diferencia entre los dos últimos argumentos ( int arg2, long arg3 ). Como se puede ver en mi código, cuando intento Toast , obtengo el mismo valor para ambos argumentos.

Tuve la misma pregunta que tú. Sin embargo, las respuestas aquí no fueron muy útiles. Realmente no apoyo realmente las respuestas de go-look-it-up-yourself, especialmente cuando la documentación llamada es tan poco clara. Lo busqué yo mismo, sin embargo, y lo siguiente es lo que encontré. Tal vez va a salvar a algunas personas algún tiempo.

El valor int es la posición de la vista en el padre . Para un ListView , es el número de fila. La fila superior es la posición 0, la segunda fila es la posición 1, la tercera fila es la posición 2, etc. Tenga en cuenta que si su ListView tiene una vista de encabezado (como si hiciera ListView.addHeaderView(View) ) entonces la vista del encabezado sería Posición 0 y las filas reales comenzarían su numeración en 1.

A veces el valor largo es igual que la posición int ya veces es diferente. Si está usando un ArrayAdapter o SimpleAdapter entonces son iguales (excepto en el caso de que haya una vista de encabezado y luego estén apagados por uno). Para un CursorAdapter (y consecuentemente un SimpleCursorAdapter ) el id largo devuelve el id de la fila de la tabla, es decir, _id . Es un largo en vez de un int porque una base de datos podría teóricamente tener más filas que un int podría sostener mientras que un ListView no.

Aquí hay algunas otras respuestas relacionadas:

Considere leer la documentación .

El int es la posición de la vista, el long es el ID del elemento.

(No podemos ver que obtienes el mismo valor para ambos, solo vemos tu código, no tu pantalla.)

Las respuestas dadas son muy útiles. Pero la respuesta necesaria, quiero decir la respuesta exacta que quería fue publicado como un comentario para la pregunta por mí mismo. Pero eso no aumentará mi "nivel de aceptación". Así que pensé en poner el enlace como la respuesta a la pregunta. Aquí está el enlace a la respuesta.

Int value representa la posición del elemento, y el valor largo representa el Id del elemento . .

 public abstract void onItemClick (AdapterView<?> parent, View view, int position, long id) parent The AdapterView where the click happened. view The view within the AdapterView that was clicked (this will be a view provided by the adapter) position The position of the view in the adapter. id The row id of the item that was clicked. 

En mi opinión, a través de la posición, puede obtener elemento de fila con el adaptador getItem (posición). Por lo tanto, la posición significa la posición de datos en el adaptador.

Para el parámetro id, creo que es un método de ayuda, como usted sabe, los datos en el adaptador siempre es una grabadora. Hablando en general, una grabadora debe tener una columna id (algo así como el ID de la base de datos). Al codificar, usted puede conseguir el artículo a través de la posición, después consigue la identificación del artículo (si el artículo tiene identificación). Pero puede obtener tal "id" directamente con el parámetro "id". Usted puede notar: la posición es tipo "int" mientras que "id" es "largo" tipo.

Por cierto, si quieres usar el parámetro id, tienes que implementar el método getItemId () en el adaptador. El implemento predeterminado en ArrayAdapter es simplemente devolver la posición.

  • ¿Cómo implementar el evento de clic en el icono de la barra de herramientas?
  • Android setOnItemClickListener no funciona en una fila, pero está bien en otra fila, usando 2 layouts de fila
  • OnItemClickListener no funciona correctamente cuando el adaptador contiene un botón con onClickListener
  • ¿Cómo hacer que los elementos se puedan hacer clic en la vista de lista?
  • Cómo crear listview onItemclicklistener
  • Haga clic en largo Haga clic en span no disparar hasta que se haga clic
  • OnItemClickListener (), cómo pasar los datos del elemento pulsado?
  • OnItemClickListener usando ArrayAdapter para ListView
  • OnItemClickListener no funciona con el elemento ListView que contiene el botón
  • Autocompletetextview setonitemselectedlistener no funciona
  • Cómo actualizar el contenido de una sola fila en mi ListView utilizando OnItemClick
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.