marcar item seleccionado gridView

1,655 views
Skip to first unread message

neon2004

unread,
Jan 23, 2013, 4:56:19 AM1/23/13
to desarrollad...@googlegroups.com
Hola.

Tengo un gridView y quiero que cuando seleccione un item este se quede marcado. Hasta ahora tengo que se marque al seleccionarlo pero enseguida pierde la marca y me gustaría que se quedara marcado hasta que seleccione otro item y esta marca se desplace a ese otro item seleccionado.

He visto por ahi codigo como estos, pero no consigo hacrlo funcioanar:

grid_selector.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
      <item android:drawable="@drawable/bg_cell_high_2x" android:state_pressed="true"/>
    <item android:drawable="@drawable/bg_cell_high_2x" android:state_selected="true"/>
</selector>

En el layout el codigo del gridView seria:

   <GridView
                android:id="@+id/gridView1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:columnWidth="260dp"
                android:drawSelectorOnTop="true"
                android:horizontalSpacing="0dp"
                android:listSelector="@drawable/grid_selector"
                android:numColumns="2"
                android:stretchMode="columnWidth"
                android:verticalSpacing="20dp" >               
     </GridView>

Por lo que entiendo con el código que resalto en azul al hacer clic debe hacer referencia al grid_selector y ponerme por tanto mientras este presionado y seleccionado la imagen que se indica en este xml, pero a mi no me funciona y no se que hago mal. Los ejemplos y foros que he visto hacen eso pero como os comento no me funciona. ¿Podéis ayudarme? Gracias



neon2004

unread,
Jan 25, 2013, 4:21:01 AM1/25/13
to desarrollad...@googlegroups.com
Hola.

He conseguido cambiar el color de la celda que selecciono.

Ahora se me presenta un nuevo problema y es que como la lista es reutilizable pues me pinta mas de una fila, es decir, si la lista contiene 6 item y solo se muestran 3, pues me pinta la fila 1 y la 4 ya que estas vistas son la misma.

¿Como podría hacer para que solo me cambie el fondo de la que he seleccionado?
¿Podría acceder a la vista de la posición en la que marco??

El código que uso asta ahora es:


gridView.setOnItemClickListener(new OnItemClickListener() {
                    @Override
                    public void onItemClick(AdapterView<?> arg0, View arg1,
                            int position, long arg3) {

                        click_item = true;
                       
// Esta parte la uso para poder quitar el fondo cambiado a la fila seleccionada anteriormente

                        if(vista != null){
                            if(!vista.equals(arg1)){
                                arg1.getBackground();
                                vista.setBackgroundDrawable(arg1.getBackground());
                            }                           
                        }  

// Aqui cambio el fondo de la fila seleccionada actualmente
                              arg1.setBackgroundColor(Color.argb(200,208,245,169));   
vista = arg1;

});

Juan de Dios Maldonado Sánchez

unread,
Jan 25, 2013, 6:30:40 AM1/25/13
to desarrollad...@googlegroups.com
En el onItenClickListener lo único que deberías hacer sería guardar en algún sitio la posición de la fila (o filas) seleccionada, de forma que en el adaptador, en el getView, cambies el fondo del view que devuelves si coincide que ese está en la posición marcada, y si no, pones el fondo normal (de no seleccionado). Por eficiencia, Android reutiliza las vistas. Si tu lista no va a tener más de 10 elementos, podrías forzar que no se reutilicen las msimas simplemente dejando de utilizar el "View convertView" en getView(...), y creando cada vez una vista nueva.


2013/1/25 neon2004 <diego....@bbvaglobalnet.com>

--
Para participar es necesario que leas detenidamente las normas del grupo: http://goo.gl/20KhL
---
Has recibido este mensaje porque estás suscrito al grupo "desarrolladores-android" de Grupos de Google.
Para publicar una entrada en este grupo, envía un correo electrónico a desarrollad...@googlegroups.com.
Para anular tu suscripción a este grupo, envía un correo electrónico a desarrolladores-a...@googlegroups.com
Para ver este debate en la Web, visita https://groups.google.com/d/msg/desarrolladores-android/-/EGq4hmlQhoEJ.
Para obtener más opciones, visita https://groups.google.com/groups/opt_out.
 
 

neon2004

unread,
Jan 25, 2013, 12:01:42 PM1/25/13
to desarrollad...@googlegroups.com
Algo asi intente pero sin exito, de todos modos probare de nuevo.

El caso es que mi lista si tiene mas de 10 item, tendra un total de 15,¿podria forzar la no reutilizacion de todos modos, o seria una barbaridad?

Gracias

Juan de Dios Maldonado Sánchez

unread,
Jan 25, 2013, 12:04:27 PM1/25/13
to desarrollad...@googlegroups.com
Si como mucho tendrás 15 elementos puedes perfectamente generar una vista nueva cada vez. El único problema que tendrás es que puede ralentizarse al hacer scroll ya que tiene que generar vistas nuevas. Prueba a ver, que no te cuesta mucho tiempo y si te convence el resultado pues te quedas así. Si no, tendrás que meter esa funcionalidad en el adaptador.


2013/1/25 neon2004 <djcam...@gmail.com>
Algo asi intente pero sin exito,  de todos modos probare de nuevo.

El caso es que mi lista si tiene mas de 10 item,  tendra un total de 15,¿podria forzar la no reutilizacion de todos modos,  o seria una barbaridad?

Gracias
--
Para participar es necesario que leas detenidamente las normas del grupo: http://goo.gl/20KhL
---
Has recibido este mensaje porque estás suscrito al grupo "desarrolladores-android" de Grupos de Google.
Para publicar una entrada en este grupo, envía un correo electrónico a desarrollad...@googlegroups.com.
Para anular tu suscripción a este grupo, envía un correo electrónico a desarrolladores-a...@googlegroups.com
Reply all
Reply to author
Forward
0 new messages