我试图让 Android onClick()
方法更易于阅读,所以我像这样包装它
public void click(Button bt) {
bt.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {}
});
}
当我尝试像这样运行它时
button = (Button) findViewById(R.id.btn1);
click(button) {
@Override
public void onClick(View v) {
Log.v("hi", "test");
}
}
或
button = (Button) findViewById(R.id.btn1);
click(button) {
@Override
public void onClick(View v) {
Log.v("hi", "test");
}
};
或
button = (Button) findViewById(R.id.btn1);
click(button) {
@Override
public void onClick(View v) {
Log.v("hi", "test");
};
};
它给出了以下错误:
[error] /home/retok/proj/src/com/hellow/app/HelloActivity.java:32: ';' expected
[error] /home/retok/proj/src/com/hellow/app/HelloActivity.java:34: ';' expected
[error] /home/retok/proj/src/com/hellow/app/HelloActivity.java:34: ';' expected
[error] (compile:compileIncremental) javac returned nonzero exit code
这是为什么呢?正如你所看到的,我将 ;
放在需要的地方。而且我不能将 ;
放在 public void onClick(View v) {
和 click(button) {
之后,因为这会关闭该方法并给出错误。
这里有一个错误:
click(button) {
@Override
click(button)
被视为一个方法调用,该行的其余部分当时被忽略,但该调用缺少一个;
。
您似乎正在尝试重写由 new View.OnClickListener()
创建的匿名类的方法部分,但这是不可能/不允许的。
我的理解是,您希望为多个按钮使用一个按钮处理程序。这确实是可以的,但是你没有正确的做法。
来自this question ,此非选中answer展示如何在一个位置处理多个按钮:
@Override
public void onCreate(Bundle savedInstanceState) {
button1.setOnClickListener(onClickListener);
button2.setOnClickListener(onClickListener);
button3.setOnClickListener(onClickListener);
}
private OnClickListener onClickListener = new OnClickListener() {
@Override
public void onClick(final View v) {
switch(v.getId()){
case R.id.button1:
//DO something
break;
case R.id.button2:
//DO something
break;
case R.id.button3:
//DO something
break;
}
}
};
(如果您确实想以相同的方式处理任何按钮,则不需要开关
,这似乎不太可能)。
我是一名优秀的程序员,十分优秀!