Android – Cómo configurar un método con nombre en button.setOnClickListener ()
La mayoría de las muestras que veo parecen utilizar un método anónimo en una llamada como button.setOnClickListener (). En su lugar, 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 cableado del controlador de eventos siguiente en C #?
Button myButton = new Button(); myButton.Click += this.OnMyButtonClick;
Dónde:
- Implementar múltiples oyentes de eventos en el mismo fragmento - Android
- OnTouch en MapView sólo se dispara la primera vez
- ¿Cómo puedo cambiar el texto de EditText sin activar el Text Watcher?
- Android: no puede ver ACTION_MOVE / UP en onTouchEvent de un RelativeLayout
- ¿Cómo es posible contar el número de mensajes en cola en un Handler?
private void OnMyButtonClick(object sender, EventArgs ea) { }
Esencialmente, me gustaría reutilizar un método no anónimo para manejar el evento de clic de varios botones.
- Cómo mantener DropDownList de AutoCompleteTextView abierto después de presionar la tecla Atrás?
- Detectar evento de desplazamiento en el navegador de Android
- Android: ¿cómo obtener algún evento de KeyPress con ejemplo?
- Interacción de ExpandableListAdapter.getChildView () con AbsListView.LayoutParams
- Cómo detectar un evento TOUCH con otro dedo mientras un ACTION_MOVE está en proceso
- Manejo de un elemento de menú Haga clic en Evento - Android
- Crear un controlador personalizado de finalización / devolución de llamada para devolver objetos después de que se completa una solicitud HTTP
- Android: Añade escuchas de eventos a cada elemento de un ListView
La respuesta de Roman Nurik es casi correcta. View.OnClickListener () es en realidad una interfaz. Por lo tanto, si su Actividad implementa OnClickListener, puede configurarla como el controlador de clics.
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á atascado utilizando la función basada en la interfaz. En .Net puede especificar una función diferente mediante el uso de delegados.
El argumento a 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 listener 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 tendrá que ser este …
public void onMyButtonClick(View view){ }
Si no está utilizando botones dinámicos, puede configurar el evento "onClick" del diseñador a "onMyButtonClick". Así es como lo hago para los botones estáticos en una pantalla. Fue más fácil para mí relacionarlo con C #.