2014-01-09 90 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

相關問題