error: /home/retok/proj/src/com/hellow/app/HelloActivity.java:34: ';' expected
error: /home/retok/proj/src/com/hellow/app/HelloActivity.java:34: ';' expected
我试图让 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
public void onClick((View v) {
Log.v("hi", "test");
}
});
你这里有错误:
click(button) {
@Override
click(button)
被视为方法调用,当时忽略该行的其余部分,但该调用缺少 ;
.
您似乎试图覆盖由 new View.OnClickListener()
创建的匿名 class 的方法部分,但这是不可能的/不允许的。
我的理解是您希望为多个按钮设置一个按钮处理程序。这个确实可以,只是你没有正确的做法。
来自 this question, this non-selected 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;
}
}
};
(如果您真的想以相同的方式处理任何按钮,则不需要 switch
,这似乎不太可能)。
我试图让 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
public void onClick((View v) {
Log.v("hi", "test");
}
});
你这里有错误:
click(button) {
@Override
click(button)
被视为方法调用,当时忽略该行的其余部分,但该调用缺少 ;
.
您似乎试图覆盖由 new View.OnClickListener()
创建的匿名 class 的方法部分,但这是不可能的/不允许的。
我的理解是您希望为多个按钮设置一个按钮处理程序。这个确实可以,只是你没有正确的做法。
来自 this question, this non-selected 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;
}
}
};
(如果您真的想以相同的方式处理任何按钮,则不需要 switch
,这似乎不太可能)。