簡體   English   中英

Android - 如何在button.setOnClickListener()中設置命名方法

[英]Android - How to set a named method in button.setOnClickListener()

我看到的大多數示例似乎在調用中使用了一個匿名方法,如button.setOnClickListener()。 相反,我想傳入我正在使用的Activity類上定義的方法。在C#中,以下事件處理程序連接的Java / Android等價物是什么?

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

哪里:

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

本質上,我想重用一個非匿名方法來處理多個按鈕的click事件。

Roman Nurik的回答幾乎是正確的。 View.OnClickListener()實際上是一個接口。 因此,如果您的Activity實現了OnClickListener,則可以將其設置為按鈕單擊處理程序。

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

.Net中沒有代理,因此您不得不使用基於接口的功能。 在.Net中,您可以通過使用委托指定不同的功能。

View.setOnClickListener的參數必須是View.OnClickListener類( View類的內部類)的實例。對於您的用例,您可以將此內部類的實例保存在變量中,然后將其傳入,像這樣:

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

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

如果跨多個子例程/方法需要此偵聽器,則可以將其作為成員變量存儲在activity類中。

方法的簽名需要是這個......

public void onMyButtonClick(View view){

}

如果您不使用動態按鈕,則可以將“onClick”事件從設計器設置為“onMyButtonClick”。 這就是我為屏幕上的靜態按鈕做的。 我更容易將它與C#聯系起來。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM