2012-10-04 44 views
8

como sabemos usar la vista de cuadrícula androide, podemos hacer lo siguiente y recibir una notificación cuando se hace clic elemento:posición get androide del tema se hace clic en el gridview

gridview.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
    public void onItemClick(AdapterView<?> parent, View v, int position, long id) { 
    Toast.makeText(PopularCapitActivity.this, "" + position, Toast.LENGTH_SHORT).show(); 
    } 
}); 

también sabemos que, si la celda de la cuadrícula contiene un elemento en el que se puede hacer clic, por ejemplo, un botón, lo anterior no se activará.

Así que actualmente tengo una vista de cuadrícula, cada celda tiene su propio botón, por lo que ahora cuando el usuario haga clic en el botón, tendrá su propia acción basada en la celda en la que reside el botón, mi pregunta es ¿cómo puedo acceder a la posición de la celda en el controlador de botón?

gracias

+0

¿Está utilizando un adaptador personalizado para GridView? – dennisdrew

+0

sí, tengo uno personalizado simplemente ampliando BaseListAdapter – user1697965

Respuesta

28

Suponiendo que usted está usando un adaptador personalizado para el GridView, en el método getView simplemente puede añadir una etiqueta al objeto Button que contiene la posición pasó a getView:

button.setTag(new Integer(position)); 

Entonces , en el método OnClickListener, con la vista que se pasa (el botón) que puede hacer:

Integer position = (Integer)view.getTag(); 

Y luego manejar el valor de posición a partir de ahí.

EDIT: Parece ser la mejor práctica sería hacer:

button.setTag(Integer.valueOf(position)); 

en lugar de utilizar el constructor de enteros.

+5

Oh wow, gracias. Mi única pregunta es: ¿por qué esta respuesta no tiene 5000 votos por votos? ¿Soy la única persona que pone botones en GridViews? –

+1

¡Gracias! Acabo de actualizar mi respuesta para tener en cuenta las mejores prácticas. Se recomienda usar Integer.valueOf (position) en lugar del constructor. – dennisdrew

+0

¡Gran solución! Ahora, sin embargo, 'Integer.valueOf (position)' no es necesario, solo pasar 'position' también funcionará. – jpyams

0
gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() 
{ 
    @Override 
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) 
    { 
     String a = String.valueOf(position); 
     Toast.makeText(getApplicationContext(), a, Toast.LENGTH_SHORT).show(); 
    } 
}); 
Cuestiones relacionadas