我该用什么作为setOnClickListener()方法的参数?

时间:2011-11-28 19:58:33

标签: android button

我正在尝试为我的程序中的5个按钮创建多个OnClickListener方法,并且我已经能够声明它们,并且我使用所点击的内容的xml id进行了切换,但我需要一个参数用于我调用它时的setOnClickListener方法,所有可行的方法都是null。我也试过传递这个,所以方法有上下文。

以下是一些代码:

 add.setOnClickListener(null);
        sub.setOnClickListener(null);
        mult.setOnClickListener(null);
        div.setOnClickListener(null);
        equal.setOnClickListener(null); 

5 个答案:

答案 0 :(得分:3)

该参数必须是实现OnClickListener接口的某个对象的实例。一种方法是使用匿名内部类:

add.setOnClickListener(new OnClickListener{
  public void onClick(View view){
//your event handler code here
}
});

另一种方法是让您的类实现OnClickListener - 通过将您的声明更改为:

public class MyActivity extends Activity implements OnClickListener{

然后定义onClick方法的实现:

public void onClick(View view){
   if(view == add){
      //handle add button click
    }else if (view == sub){
      //handle sub button click
    }
    //etc

}

然后安装你可以做的监听器:

add.setOnClickListener(this);

答案 1 :(得分:2)

您应该将View.OnClickListener传递给此函数,该函数是一个单击按钮后将被调用的侦听器。

要做到这一点,你可以:

  1. 使用按钮在布局XML中声明此侦听器,如this site中按钮4中所指定。

  2. 创建View.OnClickListener的实例并将其传递给setOnClickListener方法,如下例所示(取自android site,这是一个很好的来源):

    // Create an anonymous implementation of OnClickListener
    private OnClickListener mCorkyListener = new OnClickListener() {
        public void onClick(View v) {
          // do something when the button is clicked
        }
    };
    
    protected void onCreate(Bundle savedValues) {
        ...
        // Capture our button from layout
        Button button = (Button)findViewById(R.id.corky);
        // Register the onClick listener with the implementation above
        button.setOnClickListener(mCorkyListener);
        ...
    }
    
  3. 由于View.OnClickListener是一个接口,您的活动也可以实现它,并且本身就是监听器,在这种情况下,您将活动实例(this)传递给{{1} }方法,但这只是一个选项,而不是推荐的恕我直言。

答案 2 :(得分:0)

来自.NET背景,我一开始就挣扎着同样的事情。它只是一种与.NET不同的语法,因为java不支持属性,或者像我以前那样的事件。以下是使用类级别单击侦听器变量...

的简单示例
@Override
private void onCreate(Bundle bundle) {
    myButton.setOnClickListener(this.genericButtonListener);
}

private OnClickListener genericButtonListener = new OnClickListener() {
   @Override
   public void onClick(View v) {
    //v represents your button
   }        
};

答案 3 :(得分:0)

你需要一个具体的课程。例如:

imageView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            // your code here
        }
    });

答案 4 :(得分:0)

如果您查看documentation,您会注意到它需要View.OnClickListener作为参数。如果你需要五个独立的监听器,你不会在其他任何地方使用它们,你可以传递一个实现onClick(View v)的匿名类,就像这样

add.setOnClickListener(new View.OnClickListener(){
    @Override
    public void onClick(View v){
        //do required actions here
    }
});