2012-01-26 4 views
9

С помощью этого кода:OnClickListener() должен переопределить метод суперкласса?

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) типа нового View.OnClickListener() {} должны переопределить метод суперкласса

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

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

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

ответ

27

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

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

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

+2

restart Eclipse -> очень важный шаг! +1, потому что это решило мою проблему. – cwin

+0

Даже после того, как я применил все шаги выше и перезапустил Eclipse, ошибка все еще была. Мне пришлось заменить «новый OnClickListener ...» на «новый View.OnClickListener ...», чтобы получить чистый компилятор. Затем я вернулся к «новому OnClickListener ...», и все оставалось в порядке. Очевидно, проблема затмения (Juno)! –

+0

Я пробовал все, но, наконец, перезапустил Eclipse, сделал трюк. – cdavidyoung

2

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

+0

Это все кажется хорошим, но две записи «Disallow Identifiers» читают «Ошибка». Это нормально? Кроме того, что я увеличиваю его с 1,6 до 1,7? Это возможное решение? –

+0

Я не знаю, что произойдет, когда вы столкнетесь с 1.7. На момент написания этой статьи я поставил его там, где «Не пересекайте потоки». Что касается «Disallow Identifiers» - это обычно означает, что у вас есть имя переменной где-то зарезервированное ключевое слово, например «assert» или «enum». Вам нужно будет проверить номер строки. –

3

Две вещи, чтобы рассмотреть следующие вопросы:

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

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

2
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() {}); 

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

+0

Это не похоже на проблему. Я добавил свой импорт выше. –

+0

Хорошо, вы можете обойти эту проблему! например, пусть активность реализует интерфейс View.OnClickListener и переопределяет метод onclick, а затем устанавливает onClick this -> '.setOnClickListener (this);' – daigoor

2

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

+0

Большое вам спасибо – daigoor

Смежные вопросы