OnClickListener() must override a superclass method?

倖福魔咒の 提交于 2019-12-22 04:07:14

问题


With this code:

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

I'm getting:

The method onClick(View) of type new View.OnClickListener(){} must override a superclass method

It would seem that this problem is sometimes caused by a Project | Properties | Java Compiler being set to 1.5.

Although I'm virtually I'd had this problem before, and changed it to 1.6, somehow it WAS 1.5 again.

HOWEVER, that (changing it to 1.6) did not solve the problem. I'm still getting that same err msg, after cleaning, building, and F11ing...???


回答1:


I would recommend that you uncheck "Enable project specific settings", click "Configure Workspace Settings..." and change "Compiler Compliance Level" to 1.6 or above. Otherwise you would have to specify it every time.

If you need a specific compliance level for a specific project, you need to verify every other project that need compliance level 1.6 or above is set to this.

After everything is correctly setup - clean projects and restart Eclipse. Eclipse can be such a bitch some times - this often solves problems for me.




回答2:


Two things to consider:

1) Take a look at your imports - are you sure that View.OnClickListener is imported, but not lets say DialogInterface.OnClickListener

2) OnClickListener is actually an interface, that you are instantiating anonymously. So after all when writing the onClick method you are actually not overriding a super class method, but instead implementing an interface method. Annotating interface methods with @Override is a good practice, but this has been introduced in JDK 6, which means that by the time Android 1.5 or 1.6 was developed this may not has been yet introduced to the java language and hence making it an invalid syntax.




回答3:


Right below the "Compiler Compliance Level", there are a few options grayed out if the "Use default compliance settings" checkbox is checked: Namely, "Generated .class files compatibility" and "Source compatibility". Verify that both of those are set to 1.6 - If not, either change the default compliance settings, or uncheck that box and tweak them directly.




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

try to replace this line

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

this error you got happened when your trying to assignee the On-click to unexpected type ! So, beleive me Eclipse IDE most of time will import DialogInterface instead of View so write it by your self.




回答5:


daigoor is right. Eclipse always try to do this 'import android.content.DialogInterface.OnClickListener' instead of the doing this -> 'import android.view.View.OnClickListener'. That solves my problem.



来源:https://stackoverflow.com/questions/9026918/onclicklistener-must-override-a-superclass-method

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!