Tengo la actividad:
public class Mtest extends Activity {
Button b1;
Button b2;
public void onCreate(Bundle savedInstanceState) {
...
b1 = (Button) findViewById(R.id.b1);
b2 = (Button) findViewById(R.id.b2);
b1.setOnClickListener(myhandler);
b2.setOnClickListener(myhandler);
...
}
View.OnClickListener myhandler = new View.OnClickListener() {
public void onClick(View v) {
// MY QUESTION STARTS HERE!!!
// IF b1 do this
// IF b2 do this
// MY QUESTION ENDS HERE!!!
}
}
}
¿Cómo verifico en qué botón se ha hecho clic?
Respuestas:
Aprenderá la forma de hacerlo, de una manera fácil, es:
O, si está trabajando con un solo clicklistener, puede hacer:
Sin embargo, no recomiendo hacerlo de esa manera, ya que tendrá que agregar uno
if
para cada botón que use. Eso es difícil de mantener.fuente
View
no es unButton
, peroButton
es unView
. Sin embargo, puedes lanzar unView
a aButton
. Tenga en cuenta que la segunda forma de hacerlo no es recomendable ... tal vez que v no sea un Botón, lo que generará una excepción de lanzamiento.O puede intentar lo mismo pero sin oyentes. En la definición XML de su botón:
Y en su código defina el método
ButtonOnClick
:fuente
if
declaraciones y oyentes. Los oyentes son excelentes si los botones se crean en tiempo de ejecución, pero a menudo ese no es el caso.Fragment
s, ya que la devolución de llamada debe residir en la actividad (no en el fragmento).Yo prefiero:
Y entonces:
Switch
-case
es más fácil de mantener queif
-else
, y esta implementación no requiere hacer muchas variables de clase.fuente
Cinco formas de conectar un oyente de eventos es un excelente artículo que describe las diversas formas de configurar un solo oyente de eventos. Permítanme expandir eso aquí para múltiples oyentes.
1. Clase de miembro
2. Tipo de interfaz
3. Clase interna anónima
4. Implementación en actividad
5. Atributo en Ver diseño para eventos OnClick
Y en xml:
fuente
Si no desea guardar instancias del botón 2 en el código de clase, siga esta MEJOR manera (¡esto es más claro y rápido!):
fuente
Otra forma de hacerlo es un solo oyente de la actividad, como este:
Me gusta hacerlo con un solo IF en lugar de cambiar, pero si lo prefieres, entonces debes hacer:
fuente
La mejor manera es mediante
switch
-ing entre v.getId (). Tener un OnClickListener anónimo separado para cada botón está ocupando más memoria. Transmitir vista al botón es innecesario. Usar if-else cuando el cambio es posible es más lento y más difícil de leer. En la fuente de Android, a menudo puede notar la comparación de las referencias de if-else:No sé exactamente por qué eligieron de esta manera, pero también funciona.
fuente
use setTag ();
Me gusta esto:
fuente
Además de la respuesta de Cristian C (lo siento, no tengo la capacidad de hacer comentarios), si crea un controlador para ambos botones, puede comparar directamente v con b1 y b2, o si desea comparar por ID, no es necesario convertir v en Button (View también tiene el método getId ()), y de esa manera no hay que preocuparse por la excepción de conversión.
fuente
fuente
Mira este artículo para más detalles
fuente