Ver la Versión Completa : ListView con imágenes
desdroid
07/04/13, 21:39:24
Hola, llevo poco tiempo programando en Android y me ha surgido un problema en mi aplicación que no consigo resolver. Tengo una lista con imágenes y la imagen inicial (ImageView) es la misma para todos los items de la lista. Al hacer una pulsación larga sobre un item, aparece un menú contextual con la opción "Cambiar imagen". Al pulsar esta opción, en lugar de cambiarse la imagen del item seleccionado (que es lo que busco), se cambia siempre la imagen del primer item de la lista.
Éste es mi código:
// Menú contextual
@Override
public boolean onContextItemSelected(MenuItem item) {
final AdapterContextMenuInfo info2 = (AdapterContextMenuInfo) item.getMenuInfo();
switch(item.getItemId()) {
case R.id.imagen: // Opción del menú contextual: cambiar imagen
// Aquí quiero que al seleccionar esta opción, se cambie la imagen inicial del item seleccionado por otra imagen que está ubicada en la carpeta drawable, pero sólo se cambia la imagen del primer item, aunque pulse cualquier otro item.
// Creo que tengo que hacer referencia a info2, que es la variable que indica qué elemento ha sido pulsado, pero no sé cómo hacerlo.
ImageView iv = (ImageView) findViewById(R.id.ivImagen);
iv.setImageResource(R.drawable.otraimagen);
return true;
}
return super.onContextItemSelected(item);
}
Espero haberme explicado bien y que alguien me pueda ayudar, es urgente.
kriogeN
07/04/13, 22:07:23
El problema está aquí:
ImageView iv = (ImageView) findViewById(R.id.ivImagen);
Haciendo eso te va a devolver siempre el primer elemento que se llame R.id.ivImagen que se encuentre en la Activity, que en este caso siempre será el primer elemento del ListView.
Lo que tienes que hacer es almacenar en alguna variable global la ImageView donde haces el OnItemLongClick (casteando la View a ImageView), y hacerle el setImageResource al ImageView de la variable.
desdroid
08/04/13, 12:26:17
Para que la variable sea global, tengo que declararla fuera del método onContextItemSelected():
ImageView iv;
iv = (ImageView) findViewById(R.id.ivImagen);
Y, después, dentro de este método tengo que hacer iv.setImageResource(R.drawable.otraimagen).
¿Es así?
kriogeN
08/04/13, 17:32:54
Sigues teniendo el mismo problema, no puedes hacer un findViewById sobre la Activity, siempre te devolverá el primer Item.
La ImageView que has pulsado es la View del "onCreateContextMenu"
desdroid
08/04/13, 17:39:16
Y, ¿cómo accedo al View del "onCreateContextMenu" desde el método "onContextItemSelected"?
desdroid
09/04/13, 19:58:22
¿Alguna sugerencia?
desdroid
10/04/13, 23:05:01
kriogeN, ¿podrías ayudarme, por favor? ;-)
Hola desdroid, yo ando empezando con el desarrollo Android desde hace poco pero con ensayo y error más o menos me voy apañando. Si quieres pásame el proyecto aunque sea con datos falsos e intento solucionar tu error.
Salu2.
kriogeN
11/04/13, 00:20:23
kriogeN, ¿podrías ayudarme, por favor? ;-)
Una solución rápida es que en el getView del Adapter hagas un setOnTouchListener sobre la View y esa View la pongas en la variable global en el DOWN.
Una solución mejor sería usar el setOnLongClickListener sobre la View en el getView del Adapter, pero creo que para tu caso te conllevaría modificar bastante más el código.
desdroid
11/04/13, 09:04:20
Una solución rápida es que en el getView del Adapter hagas un setOnTouchListener sobre la View y esa View la pongas en la variable global en el DOWN.
Una solución mejor sería usar el setOnLongClickListener sobre la View en el getView del Adapter, pero creo que para tu caso te conllevaría modificar bastante más el código.
Lo que pasa es que yo estoy utilizando un SimpleCursorAdapter y no tengo definido el método getView().
Al principio de la clase tengo declarada la variable de instancia ImageView iv;
Dentro del método sobreescrito protected void OnListItemClick (ListView l, View v, int position, long id) tengo:
iv = (ImageView) v.findViewById(R.id.ivImagen); para actuar sobre el elemento pulsado en la lista
Ahora, lo que quiero es llamar a este iv desde el método sobreescrito protected void OnActivityResult (int requestCode, int resultCode, Intent data) para asignarle otra imagen al item seleccionado mediante iv.setImageBitmap(bitmap);
Pero el problema creo que está en que el método OnListItemClick es protected y no puedo acceder a dicha variable. ¿No hay ninguna forma de acceder a la variable iv de este método desde la misma clase?
Espero haberme explicado bien.
desdroid
13/04/13, 14:08:58
Subo el post, a ver si alguien me ayuda. ;-)
vBulletin® v3.8.1, Copyright ©2000-2025, Jelsoft Enterprises Ltd.