En Android Studio es muy común poder hacer la misma función de diferentes maneras. En este tutorial te explicamos 3 formas diferentes para agregar el evento onClick a un botón en Android, usando Java.
El evento onClick se lo agregaremos a un botón, pero funciona para cualquier otro elemento que tengamos en la Interfaz de usuario (UI).
El evento onClick nos sirve para detectar cuando el usuario presiona un botón, y así podamos realizar una determinada acción. Te explicamos cómo hacerlo en Java.
Resumen, explicación rápida evento onClick en Java.
A continuación te damos un resumen, si quieres una explicación más a fondo más abajo te lo explicamos con más detalle.
Supongamos que tenemos un botón en nuestra UI ya acomodado. Que tiene una ID = “idBoton”.
1.- Evento OnClick desde la interfaz de usuario.
Una de las formas es agregar el evento onClick desde el código en XML. Para esto solo es cuestión de:
- Agregar la siguiente línea al Botón en el archivo XML. Indicando el método al que se llamará cuando el usuario presione el botón.
android:onClick="presionaBoton"
- Luego, en el código de la actividad debemos de crear el método que llamaremos teniendo como parámetro de entrada una” View”, como se muestra a continuación:
public void presionaBoton(View view) { Button boton = (Button) view; }
NOTA: Para múltiples botones, cada uno puede llamar a un método distinto. O bien al mismo método, pero en caso de querer que cada uno realice una tarea distinta, tendremos que usar la ID para identificar cada botón.
Tutorial del ciclo When() Kotlin
Tutorial de la función Switch() Java
2.- Usando setOnClickListener().
Es de las maneras más comunes de agregar un evento onClick,
- Primero debemos crear una variable tipo botón. En la actividad.
- Luego relacionarla con el botón en XML mediante su ID.
- Por último agregar el comando setOnClickListener().
public class activity_Pruebas extends AppCompatActivity { private Button btnPrueba; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity__pruebas); btnPrueba = findViewById(R.id.idBoton); btnPrueba.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { //Cuando se presione el botón, realiza una acción aquí } }); } }
NOTA: Para múltiples botones, cada botón tiene su propio espacio para configurar lo que hará, así que no necesitamos nada más.
3.- Usando el método onClick() y setOnClickListener().
Es muy similar a la manera anterior.
- Primero debemos crear una variable tipo botón.
- Luego relacionarla con el botón en XML mediante su ID.
- Debemos impementar “View.OnClickListener“.
- Después agregar el comando setOnClickListener(this). Usando el “this”, haremos que se llame al método onClick() para manejar la acción a realizar.
- Por último creamos el método onClick(), si no lo hacemos tendremos un error.
public class activity_Pruebas extends AppCompatActivity implements View.OnClickListener { private Button btnPrueba; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity__pruebas); btnPrueba = findViewById(R.id.idBoton); btnPrueba.setOnClickListener(this); } @Override public void onClick(View view) { //Cuando se presione el botón, realiza una acción aquí } }
NOTA: Para múltiples botones, si todos se manejarán desde el método onClick(). Para que cada botón ejecute una tarea diferente, es necesario identificar el botón presionado usando su ID.
Tutorial del ciclo When() Kotlin
Tutorial de la función Switch() Java
Explicación de cada manera con más detalle.
En esta sección explicaremos paso a paso como agregar el evento onClick de tres maneras diferentes, en Android Studio. Usando Java.
1.- Agregando evento OnClick(), desde la UI en XML.
Una de las maneras para saber cuándo el Usuario presiona un Botón, es agregar el evento onClick desde nuestra interfaz de usuario (UI), es decir, desde el archivo XML.
Para esto primero debemos agregar la siguiente línea al código en XML de nuestro botón. Como se ve a continuación señalado con letras negritas:
<Button android:id="@+id/idBoton" android:onClick="presionaBoton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="24dp" android:background="#000" android:text="Button" android:textColor="#fff" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/idTexto" />
En el comando anterior señalado con letras negritas, indicamos el método al que queremos que se llame cuando el usuario presione el botón. En este caso es el método llamado “presionaBoton”.
Necesitamos crear este método en nuestra actividad. Ya sea de manera manual, o bien con el foquito que indica el error. Como se ve a continuación.
El método tiene que agregarse con una “View” como entrada, de la siguiente manera:
En Java queda así:
public void presionaBoton(View view) { Button boton = (Button) view; if(presionar) { txtPrueba.setText("Botón presionado"); } else{ txtPrueba.setText("Sin presionar"); } presionar = !presionar; }
Ya terminamos, solo falta agregar la acción que desees realizar cuando el usuario presione el botón. El código completo de la actividad es:
public class activity_Pruebas extends AppCompatActivity { private TextView txtPrueba; private Button btnPrueba; private boolean presionar; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity__pruebas); txtPrueba = findViewById(R.id.idTexto); presionar=false; } public void presionaBoton(View view) { Button boton = (Button) view; if(presionar) { txtPrueba.setText("Botón presionado"); } else{ txtPrueba.setText("Sin presionar"); } presionar = !presionar; } }
Con múltiples botones.
Si tenemos varios botones, cada botón puede llamar a un método distinto y realizar su propia acción.
O bien todos los botones pueden llamar al mismo método.
Si todos llaman al mismo método, para que cada botón haga una acción distinta los diferenciaremos con su ID. Y en base a la ID podemos usar ya sean varios if(), una función switch() en Java o una función when() en Kotlin.
Tutorial del ciclo When() Kotlin
Tutorial de la función Switch() Java
2.- Agregando evento OnClick() directo con setOnClickListener().
Una de las maneras más comunes de saber cuándo el usuario presiona un botón es agregar el evento onClick() usando setOnClickListener().
En este caso dejaremos de lado la Interfaz de usuario (UI), solo nos interesa la ID del botón que es “idBoton”.
En el código de la actividad, primero declaramos una variable tipo Botón:
private Button btnPrueba;
Luego relacionamos nuestra variable con el botón en XML mediante su ID, usando findViewById(…).
btnPrueba = findViewById(R.id.idBoton);
Y por último agregamos el evento setOnClickListener(…..), de la siguiente manera:
btnPrueba.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { //Aqui, realiza una acción cuando se presione el botón } });
El código se puede agregar en el método onCreate(). O puedes crear un método especial para los eventos onClick y llamarlo desde onCreate().
El código completo es el siguiente, donde agregamos un texto para indicar que se presionó el botón.
public class activity_Pruebas extends AppCompatActivity implements View.OnClickListener { private TextView txtPrueba; private Button btnPrueba; private boolean presionar; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity__pruebas); txtPrueba = findViewById(R.id.idTexto); btnPrueba = findViewById(R.id.idBoton); presionar=false; btnPrueba.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if(presionar) { txtPrueba.setText("Botón presionado"); } else{ txtPrueba.setText("Sin presionar"); } presionar = !presionar; } }); } }
Con múltiples botones.
Al agregar más de un botón. Cada botón tiene su propio evento onClick. Por lo tanto no necesitamos implementar nada extra para distinguir entre botones. Ya que cada uno tiene su código por separado.
3.- Agregando onClick llamando al método onClcik().
Otra manera de saber cuándo el usuario presiona el botón, es usando el mismo setOnClikListener(this), pero configurando la acción desde el método onClick().
Los primeros pasos son los mismos que en el caso anterior.
Primero declaramos una variable tipo Botón:
private Button btnPrueba;
Después relacionamos la variable tipo Botón con nuestro Botón en XML, a través de su ID.
btnPrueba = findViewById(R.id.idBoton);
Por último agregamos el setOnClikListener(this) y aquí está la diferencia. Debemos indicar “this” como parámetro.
btnPrueba.setOnClickListener(this);
De esta manera estamos indicando que la acción a realizar la manejaremos desde el método onClick(). Este método lo debemos crear, de lo contrario tendremos un error. Y además debemos implementar la siguiente línea en la Actividad.
implements View.OnClickListener
Si no hemos implementado la línea anterior, nos aparecerán las siguientes opciones, seleccionamos la segunda que implementará automáticamente la lineal anterior. Y agregará un método, el cual podemos eliminar y no habrá problemas.
El método onClick() es el siguiente:
@Override public void onClick(View view) { if(presionar) { txtPrueba.setText("Botón presionado"); } else{ txtPrueba.setText("Sin presionar"); } presionar = !presionar; }
Dentro del método onClik() escribimos la acción a realizar cuando se presione el botón.
El código completo es:
public class activity_Pruebas extends AppCompatActivity implements View.OnClickListener { private TextView txtPrueba; private Button btnPrueba; private boolean presionar; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity__pruebas); txtPrueba = findViewById(R.id.idTexto); btnPrueba = findViewById(R.id.idBoton); presionar=false; btnPrueba.setOnClickListener(this); } @Override public void onClick(View view) { if(presionar) { txtPrueba.setText("Botón presionado"); } else{ txtPrueba.setText("Sin presionar"); } presionar = !presionar; } }
Con múltiples botones.
Si configuramos 2 o más botones de esta manera, debemos implementar en el método onClick() todo lo que hará cada Botón.
Si queremos que cada botón realice una acción distinta, es necesario implementar una función tipo switch() en Java o una función tipo when() en Kotlin. O bien varios if() en ambos lenguajes.
Y mediante si ID identificar cual botón se presionó.
Tutorial del ciclo When() Kotlin
Tutorial de la función Switch() Java