Programación y Desarrollo para Android Subforo exclusivo para temas de programación de software para PDAs y desarrollo de aplicaciones, interfaces, etc bajo Android

Respuesta
 
Herramientas
  #1  
Viejo 07/04/13, 21:39:24
Array

[xs_avatar]
desdroid desdroid no está en línea
Miembro del foro
 
Fecha de registro: abr 2013
Mensajes: 57
Tu operador: Movistar

ListView con imágenes

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.
Responder Con Cita


  #2  
Viejo 07/04/13, 22:07:23
Array

[xs_avatar]
kriogeN kriogeN no está en línea
Colaborador/a
· Votos compra/venta: (1)
 
Fecha de registro: oct 2010
Localización: Murcia
Mensajes: 4,637
Modelo de smartphone: Samsung Galaxy S7 Edge SM-G935F
Tu operador: Vodafone
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.
Responder Con Cita
  #3  
Viejo 08/04/13, 12:26:17
Array

[xs_avatar]
desdroid desdroid no está en línea
Miembro del foro
 
Fecha de registro: abr 2013
Mensajes: 57
Tu operador: Movistar

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í?

Última edición por desdroid Día 08/04/13 a las 13:00:18.
Responder Con Cita
  #4  
Viejo 08/04/13, 17:32:54
Array

[xs_avatar]
kriogeN kriogeN no está en línea
Colaborador/a
· Votos compra/venta: (1)
 
Fecha de registro: oct 2010
Localización: Murcia
Mensajes: 4,637
Modelo de smartphone: Samsung Galaxy S7 Edge SM-G935F
Tu operador: Vodafone
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"
Responder Con Cita
  #5  
Viejo 08/04/13, 17:39:16
Array

[xs_avatar]
desdroid desdroid no está en línea
Miembro del foro
 
Fecha de registro: abr 2013
Mensajes: 57
Tu operador: Movistar

Y, ¿cómo accedo al View del "onCreateContextMenu" desde el método "onContextItemSelected"?

Última edición por desdroid Día 08/04/13 a las 20:40:52.
Responder Con Cita
  #6  
Viejo 09/04/13, 19:58:22
Array

[xs_avatar]
desdroid desdroid no está en línea
Miembro del foro
 
Fecha de registro: abr 2013
Mensajes: 57
Tu operador: Movistar

¿Alguna sugerencia?
Responder Con Cita
  #7  
Viejo 10/04/13, 23:05:01
Array

[xs_avatar]
desdroid desdroid no está en línea
Miembro del foro
 
Fecha de registro: abr 2013
Mensajes: 57
Tu operador: Movistar

kriogeN, ¿podrías ayudarme, por favor?
Responder Con Cita
  #8  
Viejo 10/04/13, 23:08:52
Array

[xs_avatar]
newboy newboy no está en línea
Usuario novato en la web
 
Fecha de registro: abr 2013
Mensajes: 7
Modelo de smartphone: LT18i
Tu operador: Pepephone
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.
Responder Con Cita
  #9  
Viejo 11/04/13, 00:20:23
Array

[xs_avatar]
kriogeN kriogeN no está en línea
Colaborador/a
· Votos compra/venta: (1)
 
Fecha de registro: oct 2010
Localización: Murcia
Mensajes: 4,637
Modelo de smartphone: Samsung Galaxy S7 Edge SM-G935F
Tu operador: Vodafone
 Cita: Originalmente Escrito por desdroid Ver Mensaje
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.
Responder Con Cita
  #10  
Viejo 11/04/13, 09:04:20
Array

[xs_avatar]
desdroid desdroid no está en línea
Miembro del foro
 
Fecha de registro: abr 2013
Mensajes: 57
Tu operador: Movistar

 Cita: Originalmente Escrito por kriogeN Ver Mensaje
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.
Responder Con Cita
  #11  
Viejo 13/04/13, 14:08:58
Array

[xs_avatar]
desdroid desdroid no está en línea
Miembro del foro
 
Fecha de registro: abr 2013
Mensajes: 57
Tu operador: Movistar

Subo el post, a ver si alguien me ayuda.
Responder Con Cita
Respuesta

Estás aquí
Regresar   Portal | Indice > Todo sobre Android > Programación y Desarrollo para Android



Hora actual: 03:47:22 (GMT +1)



User Alert System provided by Advanced User Tagging (Lite) - vBulletin Mods & Addons Copyright © 2025 DragonByte Technologies Ltd.

Contactar por correo / Contact by mail / 邮件联系 /