java - 错误 :/home/retok/proj/src/com/hellow/app/HelloActivity. java:34: 预期为 ';'

标签 java android methods onclick onclicklistener

我试图让 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;
         }

   }
};

(如果您确实想以相同的方式处理任何按钮,则不需要开关,这似乎不太可能)。

关于java - 错误 :/home/retok/proj/src/com/hellow/app/HelloActivity. java:34: 预期为 ';',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30013882/

相关文章:

python - 在 Python 中添加到本地命名空间?

c# - C# 静态方法模板

java - 如何使用java从XML读取父节点的子节点

android - 在 Android 上,使用预填充的联系表打开添加新联系人的正确方法是什么?

java - Spring 安全 : programmatically log in

android - 如何使用 AnimatedImageDrawable 显示以 ByteBuffer 作为源的动画 GIF

Android API 21 更改了我的自定义按钮背景

c# - 一个C#类可以有多少个方法

java - list 文件从不保存我在制作 jar 文件时设置的内容

java - 使用正则表达式提取一些模式