2012-02-16 16 views
11

Sé que esta es una pregunta que se ha hecho muchas veces antes, pero parece que no puedo resolverlo en mi código. Tengo dos botones, y cuando uno está presionado, me gustaría mantenerlo en su estado seleccionado, y viceversa. He intentado hacerlo usando pero setSelected y setPressed, pero parece que no puedo hacer que funcione. Aquí está el código que estoy utilizando:mantener el botón de Android seleccionado estado

region_button.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      objects = category; 
      adap.notifyDataSetChanged(); 
      proximity_button.setPressed(false); 
      region_button.setPressed(true); 

     } 
    }); 

    proximity_button.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      objects = proximity; 
      adap.notifyDataSetChanged(); 
      region_button.setPressed(false); 
      proximity_button.setPressed(true); 

     } 
    }); 

Editar: Sobre la base de los comentarios, tengo que añadir que tengo un fondo XML personalizado para los botones, y me gustaría mantener el aspecto actual.

+1

¿Por qué no solo usa RadioGroup y RadioButton, luego establece los atributos correctos para sus RadioButtons, usando un selector debería hacer el truco! – Cehm

Respuesta

16

Ok, por lo que utiliza la funcionalidad de búsqueda de Google de internet: P y me encontré con el folowing: This threa don StackOverflow...

mycodes_Button.setOnTouchListener(new OnTouchListener() { 

      @Override 
      public boolean onTouch(View v, MotionEvent event) { 
       mycodes_Button.setPressed(true); 
       return true; 
      } 
     }); 

Pero leer el comentario, es bastante interesante!

+0

Casi a la derecha, solo para referencia de otros, el otro estado del botón también debe establecerse en falso, pero lo aceptaré de todos modos porque me puso en el camino correcto. ¡Gracias! – coder

+4

usando setSelected (http://stackoverflow.com/a/3417158/667834) funcionó mejor para mí, así que todavía podría tener funcionalidad en el lanzamiento – richy

3

¿Por qué usa botones? CheckBox o RadioGroup es la mejor solución para estos casos

checkBox.setChecked(false); 
+1

No si no le gusta la IU de las casillas de verificación. –

+2

Puedes cambiarlo a lo que quieras –

+0

Dependiendo de las necesidades, sí podrías. –

1

He aquí un pensamiento, deshabilitar el botón presionado y activar los otros. Haga que el diseño del botón desactivado sea similar al diseño presionado. El usuario lo verá como presionado, pero en realidad está desactivado.

0

Una casilla de verificación podría funcionar, pero si lo que busca es una interfaz de usuario más cerca UISegmentedControl en IOS, que es posible envolver todos los botones necesarios en una LinearLayout, entonces usted podría hacer algo a lo largo de las líneas de:

public void onClick(View v){ 
    if (v.getID == R.id.btn1) { 
     btn1.setEnabled(false); 
     btn2.setEnabled(true); 
     // do stuff 
    } 
    else if (v.getId() == R.id.btn2) { 
     btn2.setEnabled(false); 
     btn1.setEnabled(true); 
     // do stuff 
    } 
} 

Por supuesto, en su carpeta dibujable, agregará color de fondo, bordes y otras cosas visuales para cada estado.

+0

Estoy buscando un aspecto similar a NSSegmentedControl en iOS, pero el problema con su solución, es que una vez que un botón no está habilitado, al hacer clic en él de nuevo no hará nada. – coder

+0

@coder Esa es la idea detrás de UIsegmentedControl (mi error anterior para el error tipográfico). Para volver a habilitar un botón desactivado, se debe presionar otro. Funciona exactamente como un grupo de radio. –

Cuestiones relacionadas