2009-12-29 14 views
11

Die meisten Beispiele, die ich sehe, scheinen eine anonyme Methode in einem Aufruf wie button.setOnClickListener() zu verwenden. Stattdessen möchte ich eine Methode übergeben, die in der Aktivitätsklasse definiert ist, in der ich arbeite. Wie lautet das Java/Android-Äquivalent der folgenden Ereignishandlerverkabelung in C#?Android - Festlegen einer benannten Methode in button.setOnClickListener()

Button myButton = new Button(); 
myButton.Click += this.OnMyButtonClick; 

Wo:

private void OnMyButtonClick(object sender, EventArgs ea) 
{ 
} 

Im Wesentlichen Ich mag würde eine nicht-anonyme Methode zur Wiederverwendung des Click-Ereignis von mehreren Tasten zu behandeln.

Antwort

14

Roman Nuriks Antwort ist fast richtig. View.OnClickListener() ist eigentlich eine Schnittstelle. Wenn Ihre Aktivität OnClickListener implementiert, können Sie sie als Klick-Handler festlegen.

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. 
     } 
} 

Es gibt keine Delegaten wie in .Net, so dass Sie mit der Funktion basierend auf der Schnittstelle stecken bleiben. In .Net können Sie eine andere Funktion mithilfe von Delegaten angeben.

+0

Ich habe nicht bemerkt, dass Java keinen Delegattyp hatte - danke, dass du das geklärt hast! –

+1

Ich bin gerade auf diesen Artikel gestoßen (es ist eigentlich ein alter Artikel). Etwas interessante Kommentare zu ihrer Entscheidung, keine Delegierten zu verwenden. Ich weiß nicht, ob ich dem zustimme, weil ich Delegierte in .Net sehr gerne benutzt habe. http://java.sun.com/docs/white/delegates.html – GrkEngineer

1

Die Signatur der Methode muss das sein ...

public void onMyButtonClick(View view){ 

} 

Wenn Sie nicht dynamische Tasten verwenden, können Sie das „onClick“ Ereignis von dem Designer auf „onMyButtonClick“. So mache ich das für statische Buttons auf einem Bildschirm. Es war einfacher für mich, es mit C# zu vergleichen.

+0

Beachten Sie, dass dies für Android 1.6, IIRC neu ist. – CommonsWare

8

Das Argument View.setOnClickListener muss eine Instanz der Klasse View.OnClickListener (eine innere Klasse der View Klasse) sein .. Für Ihren Anwendungsfall, können Sie eine Instanz dieser inneren Klasse in einer Variablen halten und dann das passieren in, etwa so:

View.OnClickListener clickListener = new OnClickListener() { 
    public void onClick(View v) { 
     // do something here 
    } 
}; 

myButton.setOnClickListener(clickListener); 
myButton2.setOnClickListener(clickListener); 

Wenn Sie diese Zuhörer über mehrere Subroutinen/Methoden benötigen, können Sie es als eine Membervariable in Ihrer Aktivitätsklasse speichern.

Verwandte Themen