java - studio - Android: cómo configurar un método con nombre en button.setOnClickListener()
llamar una clase desde un boton en android studio (3)
La mayoría de las muestras que veo parecen usar un método anónimo en una llamada como button.setOnClickListener (). En cambio, me gustaría pasar un método definido en la clase de Actividad en la que estoy trabajando. ¿Cuál es el equivalente de Java / Android del siguiente cableado de controlador de eventos en C #?
Button myButton = new Button();
myButton.Click += this.OnMyButtonClick;
Dónde:
private void OnMyButtonClick(object sender, EventArgs ea)
{
}
Esencialmente, me gustaría reutilizar un método no anónimo para manejar el evento click de múltiples botones.
El argumento para View.setOnClickListener
debe ser una instancia de la clase View.OnClickListener
(una clase interna de la clase View
). Para su caso de uso, puede mantener una instancia de esta clase interna en una variable y luego pasarla, al igual que:
View.OnClickListener clickListener = new OnClickListener() {
public void onClick(View v) {
// do something here
}
};
myButton.setOnClickListener(clickListener);
myButton2.setOnClickListener(clickListener);
Si necesita este oyente a través de múltiples subrutinas / métodos, puede almacenarlo como una variable miembro en su clase de actividad.
La firma del método deberá ser esta ...
public void onMyButtonClick(View view){
}
Si no está utilizando botones dinámicos, puede configurar el evento "onClick" del diseñador en "onMyButtonClick". Así es como lo hago para los botones estáticos en una pantalla. Fue más fácil para mí relacionarlo con C #.
La respuesta de Roman Nurik es casi correcta. View.OnClickListener () es en realidad una interfaz. Entonces, si su Actividad implementa OnClickListener, puede configurarlo como el controlador de clic de botón.
public class Main extends Activity implements OnClickListener {
public void onCreate() {
button.setOnClickListener(this);
button2.setOnClickListener(this);
}
public void onClick(View v) {
//Handle based on which view was clicked.
}
}
No hay delegados como en .Net, por lo que estás atrapado usando la función basada en la interfaz. En .Net puede especificar una función diferente mediante el uso de delegados.