我正在尝试为我的程序中的5个按钮创建多个OnClickListener方法,并且我已经能够声明它们,并且我使用所点击的内容的xml id进行了切换,但我需要一个参数用于我调用它时的setOnClickListener方法,所有可行的方法都是null。我也试过传递这个,所以方法有上下文。
以下是一些代码:
add.setOnClickListener(null);
sub.setOnClickListener(null);
mult.setOnClickListener(null);
div.setOnClickListener(null);
equal.setOnClickListener(null);
答案 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
传递给此函数,该函数是一个单击按钮后将被调用的侦听器。
要做到这一点,你可以:
使用按钮在布局XML中声明此侦听器,如this site中按钮4中所指定。
创建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);
...
}
由于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
}
});