OnClickListener () должен переопределить метод суперкласса? - PullRequest
9 голосов
/ 27 января 2012

С этим кодом:

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

Я получаю:

Метод onClick (View) типа new View.OnClickListener () {} должен переопределить суперклассmethod

Казалось бы, эта проблема иногда вызывается проектом |Свойства |Компилятор Java установлен на 1.5.

Хотя у меня фактически была эта проблема раньше, и я изменил ее на 1.6, почему-то снова было 1.5.

ОДНАКО, что (меняя еедо 1.6) не решил проблему.Я все еще получаю то же сообщение об ошибке после очистки, сборки и F11ing ... ???

Ответы [ 5 ]

27 голосов
/ 12 июня 2012

Я бы порекомендовал снять флажок «Включить параметры проекта», нажать «Настроить параметры рабочего пространства ...» и изменить «Уровень соответствия компилятора» на 1.6 или выше. В противном случае вам придется указывать его каждый раз.

Если вам нужен определенный уровень соответствия для конкретного проекта, вам необходимо проверить, установлен ли этот параметр для каждого другого проекта, для которого требуется уровень соответствия 1.6 или выше.

После того, как все правильно настроено - очистите проекты и перезапустите Eclipse . Затмение может быть такой сукой несколько раз - это часто решает проблемы для меня.

3 голосов
/ 27 января 2012

Две вещи, на которые стоит обратить внимание:

1) Посмотрите на ваш импорт - вы уверены, что View.OnClickListener импортируется, но не скажете DialogInterface.OnClickListener

2) OnClickListener на самом деле интерфейс, который вы создаете анонимно.В конце концов, при написании метода onClick вы на самом деле не переопределяете метод суперкласса, а вместо этого реализуете интерфейсный метод.Хорошая практика - аннотировать методы интерфейса с помощью @Override, но это было введено в JDK 6, что означает, что к моменту разработки Android 1.5 или 1.6 это, возможно, еще не было введено в язык java и, следовательно, делает его недействительнымсинтаксис.

2 голосов
/ 20 июля 2012

Дайгур прав. Eclipse всегда пытается сделать это ' import android.content.DialogInterface.OnClickListener ' вместо этого -> ' import android.view.View.OnClickListener '. Это решает мою проблему.

2 голосов
/ 27 января 2012
   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() {});

эта ошибка возникла, когда вы пытались присвоить нажатие на неожиданный тип! Итак, поверьте мне, Eclipse IDE большую часть времени будет импортировать DialogInterface вместо View , так что напишите это самостоятельно.

2 голосов
/ 27 января 2012

Прямо под «Уровень соответствия компилятора», если флажок «Использовать параметры соответствия по умолчанию» отмечен, есть несколько параметров, выделенных серым цветом, а именно: «Совместимость созданных файлов .class» и «Совместимость с исходным кодом». Убедитесь, что для обоих из них установлено значение 1.6. Если нет, измените параметры соответствия по умолчанию или снимите этот флажок и настройте их напрямую.

...