【问题标题】:@override error: The method onClick(View) of type new View.OnClickListener(){} must override a superclass method@override 错误:new View.OnClickListener(){} 类型的方法 onClick(View) 必须覆盖超类方法
【发布时间】:2014-01-09 12:58:20
【问题描述】:

我想在单击按钮时导航到新页面。以下是我创建的两个活动。我正在使用 Eclipse,但在主活动中出现错误提示 The method onClick(View) of type new View.OnClickListener(){} must override a superclass method

这是我的主要活动。

package com.example.grammer;

import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.support.v4.app.NavUtils;

public class MainActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

    Button grammerButton = (Button)findViewById(R.id.grammar);

   grammerButton.setOnClickListener(new View.OnClickListener() {

       @Override
      public void onClick(View view) {
        Intent intent = new Intent(MainActivity.this, Grammer.class);
        startActivity(intent);
      }

    });
} 
}

这是我的第二个活动。

package com.example.grammer;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.support.v4.app.NavUtils;
import android.annotation.TargetApi;
import android.os.Build;

public class Grammer extends Activity {

    @Override
            public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_grammer);

         Button grammerButton = (Button) findViewById(R.id.grammar);


         grammerButton.setOnClickListener(new View.OnClickListener() {

          //    @Override
              public void onClick(View view) {
                finish();
              }

            });
          }
    }

删除@override 将删除错误,但随后应用程序无法按预期运行。

【问题讨论】:

  • 添加此import android.view.View.OnClickListener;。并添加 @Override 注释。为什么需要拨打finish()?。硬件后退按钮可以完成这项工作。
  • // @Override -> 删除 // 在第二类中
  • @faz 查看完整答案,只需要更改布局名称和按钮 ID。

标签: java android onclicklistener


【解决方案1】:

检查一下

OnClickListener() must override a superclass method?

取消勾选“Enable project specific settings”,点击“Configure Workspace Settings...”,将“Compiler Compliance Level”改为1.6或以上

有这个导入语句

 import android.view.View.OnClickListener;

不需要删除@Override Annotation。

也不需要调用finish()。硬件后退按钮可以完成这项工作。

当您在语法活动中按下后退按钮时,您当前的活动将从后退堆栈中弹出,并且后退堆栈中的前一个活动将获得焦点。所以不需要在点击按钮时调用finish()

http://developer.android.com/guide/components/tasks-and-back-stack.html

此外,如果您在 activity_grammer.xml 中有一个 ID 为 grammar 的按钮,也可以。

确保在 activity_grammer.xml 中有一个 ID 为 grammar 的按钮

你可以阅读主题id

http://developer.android.com/guide/topics/ui/declaring-layout.html

ID 在整个树中不必是唯一的,但在您正在搜索的树的部分中应该是唯一的。

【讨论】:

    【解决方案2】:

    将“编译器合规级别”更改为 1.6。来自项目属性的 java。

    【讨论】:

      【解决方案3】:

      放置此代码::

      只需将布局名称和按钮 ID 替换为您的

         import android.os.Bundle;
      import android.app.Activity;
      import android.content.Intent;
      import android.view.View;
      import android.view.View.OnClickListener;
      import android.widget.Button;
      
      
      public class MainActivity extends Activity {
      
          @Override
          public void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              setContentView(R.layout.alayout);
      
      
          Button grammerButton = (Button)findViewById(R.id.aId);
      
         grammerButton.setOnClickListener(new OnClickListener() {
      
             @Override
            public void onClick(View view) {
              Intent intent = new Intent(MainActivity.this, Grammer.class);
              startActivity(intent);
            }
      
          });
      
      } 
      }
      

      只需将布局名称和按钮 ID 替换为您的

          import android.os.Bundle;
      import android.app.Activity;
      
      import android.view.View;
      import android.view.View.OnClickListener;
      import android.widget.Button;
      
      
      public class Grammer extends Activity {
      
          @Override
                  public void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              setContentView(R.layout.blayout);
      
               Button grammerButton = (Button) findViewById(R.id.aId);
      
      
               grammerButton.setOnClickListener(new OnClickListener() {
      
                   @Override
                    public void onClick(View view) {
                      finish();
                    }
      
                  });
                }
      
          }
      

      【讨论】:

      • 不不正确。 id 在当前视图树下必须是唯一的。引用文档“ID 在整个树中不必是唯一的,但在您正在搜索的树的部分中应该是唯一的”。 developer.android.com/guide/topics/ui/declaring-layout.html
      • @Raghunandan 是的,伙计,我之前犯了一个小错误。所以我已经编辑了完整的答案。这是解决的代码。感谢您的更正。
      • 为什么布局命名要改变。错误的。它们又是 2 种不同的布局
      • @Raghunandan 什么?你能简单解释一下......因为我在这里写的我已经测试过了,然后在这里写。请简要查看他的帖子,他还被赋予了两个不同的布局名称,但按钮的 ID 相同。我也为他的设施做了同样的事情。
      • 如果它的不同布局具有相同的 id 没有问题。并且 op 已经有不同的布局
      【解决方案4】:

      您应该在代码中导入ViewClickListener 命名空间。

      只需按 ctrl + shift + O,它就会在您的项目中添加相关和缺失的命名空间。

      【讨论】:

        【解决方案5】:

        您只需为 OnClickListener 导入库。只需在 Eclipse 中按 ctrl + Shift + O ,它就会为您导入 import android.view.View.OnClickListener 文件。

        【讨论】:

          【解决方案6】:

          试试这个..

          首先,你没有导入OnClickListener

          import android.view.View.OnClickListener;
          

          第二个

          Button grammerButton = (Button) findViewById(R.id.grammar);
          

          您为不同布局中的两个 Button Id 赋予相同的名称。确保您在activity_grammer.xml 中有一个 ID 为 grammarbutton 不存在。

          【讨论】:

          • 如果 activity_grammer.xml 有一个 ID 为 grammar 的按钮,则不需要不同的按钮 ID。
          • @Raghunandan 你是正确的朋友。我检查了它是否正常工作,如果另一个 xml 中没有按钮,它将给 NPE。我也编辑了我的答案。
          猜你喜欢
          • 2015-08-13
          • 1970-01-01
          • 2021-11-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-01-31
          • 2014-08-28
          相关资源
          最近更新 更多