2014-01-09 61 views
0

我想单击按钮时导航到新页面。以下是我创建的两项活动。我正在使用eclipse,并且在主要活动中出现错误The method onClick(View) of type new View.OnClickListener(){} must override a superclass method@override错误:类型new View.OnClickListener(){}的onClick(View)方法必须重写超类方法

这是我的主要活动。

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将删除错误,但随后按预期应用程序无法正常工作。

+2

添加这个'import android.view.View.OnClickListener;'。并添加@Override注释。为什么你需要调用'finish()'?.硬件后退按钮完成这项工作。 – Raghunandan

+0

// @Override - >删除//第二类 –

+0

@faz查看完整答案,只需要更改布局名称和按钮ID。 –

回答

2

检查这个

OnClickListener() must override a superclass method?

取消选择“启用项目特定设置”,单击“配置工作区设置...”并将“编译器符合级别”更改为1。6或以上

有这import语句

import android.view.View.OnClickListener; 

无需去除@Override注释。

也呼叫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不一定是整个树唯一的,但它应该是唯一的在您正在搜索的树的部分内。

0

您只需要为OnClickListener导入库。只需按ctrl + Shift + O在您的日食中,它将为您导入import android.view.View.OnClickListener文件。

0

试试这个..

首先,你没有带导入OnClickListener

import android.view.View.OnClickListener; 

和第二个

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

你两个按钮 IDS在不同给予相同的名称布局。确保你有一个按钮与编号语法activity_grammer.xml目前没有。

+0

如果'activity_grammer.xml'有一个ID为'grammar'的按钮,则不需要不同的按钮ID。 – Raghunandan

+0

http://developer.android.com/guide/topics/ui/declaring-layout.html。编辑答案的第二部分 – Raghunandan

+0

@Raghunandan你是正确的朋友。我检查了它的工作,如果没有按钮在另一个XML它会给NPE。并且我编辑了我的答案。 – Hariharan

0

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

只需按下CTRL ++Ø它会在你的项目中添加相关的和失踪的命名空间。

1

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

0

将此代码::

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名称
+3

不正确。 id在当前视图树下必须是唯一的。引用文档“在整个树中,ID不必是唯一的,但它在你正在搜索的树的部分内应该是唯一的”。 http://developer.android.com/guide/topics/ui/declaring-layout.html – Raghunandan

+0

@Raghunandan是的老兄,我以前犯过一个小错误。所以我被编辑完整的答案。这是解决的代码。感谢您的更正。 –

+1

为什么要更改命名布局。错误。他们又是2种不同的布局 – Raghunandan

相关问题