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


 
Herramientas
  #1  
Viejo 07/04/13, 21:39:24
Avatar de desdroid
desdroid desdroid no está en línea
Miembro del foro
Mensajes: 57
 
Fecha de registro: abr 2013
Mensajes: 57
Tu operador: Movistar
Mencionado: 0 comentarios
Tagged: 0 hilos
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
Avatar de kriogeN
kriogeN kriogeN no está en línea
Colaborador/a
Mensajes: 4,637
Compra y venta: (1)
 
Fecha de registro: oct 2010
Localización: Murcia
Mensajes: 4,637
Modelo de smartphone: Samsung Galaxy S7 Edge SM-G935F
Versión de ROM: CM13 - CM 11
Tu operador: Vodafone
Mencionado: 60 comentarios
Tagged: 3 hilos
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
Avatar de desdroid
desdroid desdroid no está en línea
Miembro del foro
Mensajes: 57
 
Fecha de registro: abr 2013
Mensajes: 57
Tu operador: Movistar
Mencionado: 0 comentarios
Tagged: 0 hilos
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
Avatar de kriogeN
kriogeN kriogeN no está en línea
Colaborador/a
Mensajes: 4,637
Compra y venta: (1)
 
Fecha de registro: oct 2010
Localización: Murcia
Mensajes: 4,637
Modelo de smartphone: Samsung Galaxy S7 Edge SM-G935F
Versión de ROM: CM13 - CM 11
Tu operador: Vodafone
Mencionado: 60 comentarios
Tagged: 3 hilos
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
Avatar de desdroid
desdroid desdroid no está en línea
Miembro del foro
Mensajes: 57
 
Fecha de registro: abr 2013
Mensajes: 57
Tu operador: Movistar
Mencionado: 0 comentarios
Tagged: 0 hilos
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
Avatar de desdroid
desdroid desdroid no está en línea
Miembro del foro
Mensajes: 57
 
Fecha de registro: abr 2013
Mensajes: 57
Tu operador: Movistar
Mencionado: 0 comentarios
Tagged: 0 hilos
¿Alguna sugerencia?
Responder Con Cita
  #7  
Viejo 10/04/13, 23:05:01
Avatar de desdroid
desdroid desdroid no está en línea
Miembro del foro
Mensajes: 57
 
Fecha de registro: abr 2013
Mensajes: 57
Tu operador: Movistar
Mencionado: 0 comentarios
Tagged: 0 hilos
kriogeN, ¿podrías ayudarme, por favor?
Responder Con Cita
  #8  
Viejo 10/04/13, 23:08:52
Avatar de newboy
newboy newboy no está en línea
Usuario novato en la web
Mensajes: 7
 
Fecha de registro: abr 2013
Mensajes: 7
Modelo de smartphone: LT18i
Versión de ROM: 2.3.4
Tu operador: Pepephone
Mencionado: 0 comentarios
Tagged: 0 hilos
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
Avatar de kriogeN
kriogeN kriogeN no está en línea
Colaborador/a
Mensajes: 4,637
Compra y venta: (1)
 
Fecha de registro: oct 2010
Localización: Murcia
Mensajes: 4,637
Modelo de smartphone: Samsung Galaxy S7 Edge SM-G935F
Versión de ROM: CM13 - CM 11
Tu operador: Vodafone
Mencionado: 60 comentarios
Tagged: 3 hilos
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
Avatar de desdroid
desdroid desdroid no está en línea
Miembro del foro
Mensajes: 57
 
Fecha de registro: abr 2013
Mensajes: 57
Tu operador: Movistar
Mencionado: 0 comentarios
Tagged: 0 hilos
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
Avatar de desdroid
desdroid desdroid no está en línea
Miembro del foro
Mensajes: 57
 
Fecha de registro: abr 2013
Mensajes: 57
Tu operador: Movistar
Mencionado: 0 comentarios
Tagged: 0 hilos
Subo el post, a ver si alguien me ayuda.
Responder Con Cita
Respuesta

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


Reglas de Mensajes
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Las caritas están On
Código [IMG] está On
Código HTML está Off

Saltar a Foro



Hora actual: 22:21:32 (GMT +1)

Cookies settings
Powered by vBulletin™
Copyright © vBulletin Solutions, Inc. All rights reserved.
 
HTCMania: líderes desde el 2007