代码之家  ›  专栏  ›  技术社区  ›  James Cadd

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

  •  11
  • James Cadd  · 技术社区  · 15 年前

    我看到的大多数示例似乎在类调用button.setOnClickListener()中使用匿名方法。相反,我想传入一个方法,该方法是在我正在使用的Activity类上定义的。Java/Android等效于C语言中的以下事件处理程序布线?

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

    在哪里?

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

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

    3 回复  |  直到 14 年前
        1
  •  15
  •   GrkEngineer    15 年前

    罗马努里克的回答几乎是正确的。view.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中,可以通过使用委托来指定不同的函数。

        2
  •  8
  •   Roman Nurik    15 年前

    关于 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类中的成员变量。

        3
  •  1
  •   Ryan Alford    15 年前

    方法的签名需要是…

    public void onMyButtonClick(View view){
    
    }
    

    如果不使用动态按钮,则可以将设计器中的“onclick”事件设置为“onMyButtonClick”。这就是我在屏幕上为静态按钮做的。我更容易把它和C联系起来。