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

Jam*_*add 12 java android event-handling

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

Button myButton = new Button();
myButton.Click += this.OnMyButtonClick;
Run Code Online (Sandbox Code Playgroud)

哪里:

private void OnMyButtonClick(object sender, EventArgs ea)
{
}
Run Code Online (Sandbox Code Playgroud)

本质上,我想重用一个非匿名方法来处理多个按钮的click事件.

Grk*_*eer 16

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.
      }
}
Run Code Online (Sandbox Code Playgroud)

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


Rom*_*rik 8

该参数View.setOnClickListener必须是类的一个实例View.OnClickListener(一个内部类的View类).对于你的使用情况,您可以保持这个内部类的一个实例,在一个变量,然后把它传递,就像这样:

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

myButton.setOnClickListener(clickListener);
myButton2.setOnClickListener(clickListener);
Run Code Online (Sandbox Code Playgroud)

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