OnClickListener()必须覆盖超类方法吗?

时间:2012-01-26 23:17:37

标签: android android-widget android-button

使用此代码:

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
. . .

Button buttonAuthorizeUsers = (Button) findViewById(R.id.buttonAuthorizeUsers);
    buttonAuthorizeUsers.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent configure = new  Intent(OnDemandAndAutomatic_Activity.this, Configure_Activity.class);  
            OnDemandAndAutomatic_Activity.this.startActivity(configure); 
        }
      });

我得到了:

新的View.OnClickListener(){}类型的onClick(View)方法必须覆盖超类方法

似乎这个问题有时是由Project |引起的属性| Java编译器设置为1.5。

虽然我以前几乎遇到过这个问题,并将其改为1.6,但不知怎的,它再次为1.5。

然而,(将其改为1.6)并没有解决问题。在清理,构建和F11之后,我仍然得到同样的错误消息...... ???

5 个答案:

答案 0 :(得分:27)

我建议您取消选中“启用项目特定设置”,单击“配置工作区设置...”并将“编译器合规性级别”更改为1.6或更高版本。否则你每次都必须指定它。

如果您需要特定项目的特定合规级别,则需要验证需要合规级别1.6或以上的所有其他项目是否设置为此。

完成所有设置后 - 清理项目并重启Eclipse 。 Eclipse有时可能是个蠢事 - 这通常会为我解决问题。

答案 1 :(得分:3)

需要考虑两件事:

1)看看你的导入 - 你确定导入了View.OnClickListener,但不能说DialogInterface.OnClickListener

2)OnClickListener实际上是一个匿名实例化的接口。因此,毕竟在编写onClick方法时,实际上并没有覆盖超类方法,而是实现了接口方法。使用@Override注释接口方法是一种很好的做法,但这已经在JDK 6中引入,这意味着在开发Android 1.5或1.6时,这可能还没有引入到java语言中,因此可以使用它语法无效。

答案 2 :(得分:2)

在“编译器合规性级别”之下,如果选中“使用默认合规性设置”复选框,则会有一些选项显示为灰色:即“生成的.class文件兼容性”和“源兼容性”。验证两者都设置为1.6 - 如果不是,请更改默认合规性设置,或取消选中该框并直接调整它们。

答案 3 :(得分:2)

   Button buttonAuthorizeUsers = (Button) findViewById(R.id.buttonAuthorizeUsers);
   buttonAuthorizeUsers.setOnClickListener(new View.OnClickListener() {
       @Override
       public void onClick(View v) {
           Intent configure = new  Intent(OnDemandAndAutomatic_Activity.this,Configure_Activity.class);  
           OnDemandAndAutomatic_Activity.this.startActivity(configure); 
      }
   });

尝试替换此行

buttonAuthorizeUsers.setOnClickListener(new View.OnClickListener() {});

当你试图让受让人点击意外类型时,你发生了这个错误! 所以,相信Eclipse IDE大部分时间都会导入 DialogInterface 而不是 View ,所以请自己编写。

答案 4 :(得分:2)

daigoor是对的。 Eclipse总是尝试这样做' import android.content.DialogInterface.OnClickListener '而不是这样做 - > '导入android.view.View.OnClickListener '。这解决了我的问题。