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

Java Android-如何在button.setOnClickListener()中设置命名方法,java,android,event-handling,Java,Android,Event Handling,我看到的大多数示例似乎在button.setOnClickListener()之类的调用中使用匿名方法。相反,我想传入一个在我正在使用的Activity类上定义的方法。在C#中,以下事件处理程序的Java/Android等价物是什么 其中: private void OnMyButtonClick(object sender, EventArgs ea) { } 本质上,我希望重用一个非匿名方法来处理多个按钮的点击事件。该方法的签名需要是以下内容 public void onMyButtonC

我看到的大多数示例似乎在button.setOnClickListener()之类的调用中使用匿名方法。相反,我想传入一个在我正在使用的Activity类上定义的方法。在C#中,以下事件处理程序的Java/Android等价物是什么

其中:

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

本质上,我希望重用一个非匿名方法来处理多个按钮的点击事件。

该方法的签名需要是以下内容

public void onMyButtonClick(View view){

}

如果不使用动态按钮,可以将设计器中的“onClick”事件设置为“onMyButtonClick”。对于屏幕上的静态按钮,我就是这样做的。我更容易将其与C#关联。

视图的参数。setOnClickListener必须是类
视图的实例。OnClickListener
(视图
类的内部类)。。对于您的用例,您可以将该内部类的一个实例保存在变量中,然后将其传入,如下所示:

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

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

如果您需要跨多个子例程/方法使用此侦听器,可以将其作为成员变量存储在activity类中。

Roman Nurik的答案几乎是正确的。OnClickListener()实际上是一个接口。因此,如果您的活动实现了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中,您可以通过使用委托来指定不同的函数。

请注意,这是Android 1.6 IIRC的新功能。我没有意识到Java没有委托类型-感谢您澄清这一点!实际上,我刚刚看到这篇文章(实际上是一篇老文章)。关于他们决定不使用代理的一些有趣的评论。我不知道我是否同意,因为我喜欢在.Net中使用代理。
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.
      }
}