【问题标题】:OnClickListener() must override a superclass method?OnClickListener() 必须重写超类方法?
【发布时间】:2012-01-26 23:17:36
【问题描述】:

使用此代码:

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); 
        }
      });

我明白了:

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

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

虽然我之前几乎遇到过这个问题,并将其更改为 1.6,但不知何故又是 1.5。

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

【问题讨论】:

    标签: android android-widget android-button


    【解决方案1】:

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

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

    一切都正确设置后 - 清理项目并重新启动 Eclipse。 Eclipse 有时可能会很糟糕——这通常可以为我解决问题。

    【讨论】:

    • 重启 Eclipse -> 非常重要的一步! +1 因为这解决了我的问题
    • 即使在我应用了上述所有步骤并重新启动 Eclipse 之后,错误仍然存​​在。我必须用“new View.OnClickListener ...”替换“new OnClickListener ...”才能获得干净的编译。然后,我确实回到了“新的 OnClickListener ...”,一切都还好。显然是日食(朱诺)问题!
    • 我尝试了一切,但最终重新启动 Eclipse 成功了。
    【解决方案2】:

    需要考虑的两件事:

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 这一切似乎都很好,但是两个“Disallow Identifiers”条目显示为“Error”这样可以吗?另外,我将它从 1.6 提升到 1.7 是什么?这是一个可能的解决方案吗?
      • 我不知道当你升级到 1.7 时会发生什么——在写这篇文章时,我会用“不要越过溪流”把它放在那里。至于“Disallow Identifiers”——这通常意味着你在某个地方有一个保留关键字的变量名,比如“assert”或“enum”。您必须检查行号。
      【解决方案4】:
         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() {});
      

      当您尝试将 On-click 分配给意外类型时发生此错误! 所以,相信我 Eclipse IDE 大部分时间会导入 DialogInterface 而不是 View 所以你自己写吧。

      【讨论】:

      • 这似乎不是问题。我在上面添加了我的导入。
      • 好的,你能解决这个问题吗!比如让activity实现View.OnClickListener接口并覆盖onclick方法然后设置onClick this -> .setOnClickListener(this);
      【解决方案5】:

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

      【讨论】:

        猜你喜欢
        • 2015-08-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-26
        相关资源
        最近更新 更多