¿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.
- AutoCompleteTextView detecta cuando se selecciona la entrada de la lista editada por el usuario
- ¿Cómo uso OnItemClickListener para iniciar una nueva intención en función de qué elemento se hace clic?
- El elemento ListView no se puede hacer clic en Android
- SetOnItemLongClickListener y setOnItemClickListener no se activan cuando se utiliza arrastre-ordenar-listview (DSLV)
- Recyclerview addOnItemTouchListener obtiene la vista previa que se hace clic en la fila
- El listener de OnClick de Action Bar para el botón Inicio
- Mostrar alertDialog con los botones de radio cuando haga clic en un listViewItem
- ListView onItemClickListener no se llama
- Android: la posición de onItemClick () es relativa al área visible, no toda la lista
- Vista de lista personalizada no responde al evento de clic
- RecyclerView onItemClick Listener
- Android Gridview y el botón OnItemclick
- Cuando agrego una vista a un elemento ListView, este elemento reacciona ya no correctamente
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.