ActionBarSherlock выдает множество ошибок Call требует API уровня 11 (текущий минимум 7)

Я скачал ActionBarSherlock 4.0.3, разархивировал и создал новый проект из папки library. Папка src, согласно Eclipse, была полна ошибок, поэтому я следовал различным онлайн-инструкциям, таким как добавление android-support-v4.jar, установка целевого API на 15 и уровень соответствия компилятора на 1.6. Тем не менее, в проекте 194 ошибки, все из которых «Вызов требует уровня API 11 (текущий минимум 7)». Итак, когда я смотрю на одну из ошибок, я вижу это:

@Override
public void invalidateOptionsMenu() {
    getSherlock().dispatchInvalidateOptionsMenu();
}

public void supportInvalidateOptionsMenu() {
    invalidateOptionsMenu();
    //the previous line has this error in Eclipse:
    //Call requires API level 11 (current min is 7): android.app.Activity#invalidateOptionsMenu
}

Мне это кажется странным, потому что invalidateOptionsMenu() переопределяется предыдущей функцией, но Eclipse по-прежнему жалуется на то, что функция требует более нового уровня API. Когда я смотрю на другие ошибки, я обнаруживаю, что это относится и ко многим другим ошибкам.

У меня гораздо больше опыта работы с Python, чем с Java, поэтому я ничего не понимаю, почему это происходит. Помощь будет оценена по достоинству, и если вы поможете, не могли бы вы также объяснить, что вызывает это и что вы сделали, чтобы решить эту проблему? Я бы не хотел спрашивать кого-то каждый раз, когда у меня возникает проблема, я тоже хочу учиться.


person vurp0    schedule 21.04.2012    source источник
comment
Кажется, Eclipse по какой-то причине не согласен с тем, что вы установили уровень API на 15. Вы дважды проверяли, что ваше изменение застряло и не изменилось обратно на 7?   -  person Joachim Isaksson    schedule 21.04.2012
comment
Я не совсем уверен, что вы имеете в виду. У меня минимальный уровень API установлен на 7, а целевой уровень API установлен на 15. Мне было интересно, почему он думал, что функция требует более высокого уровня API, когда ясно, что функция (для которой обычно требуется ›11) ранее была переопределена.   -  person vurp0    schedule 21.04.2012


Ответы (5)


Поскольку вы используете минимальный уровень API 7 и invalidateOptionsMenu() не существовало до уровня API 11, вы не можете переопределить его без ошибок, поскольку, если устройство работает с уровнем API 7, функция даже недоступна в базовом классе, а несуществующая функция не может быть переопределена.

person Joachim Isaksson    schedule 21.04.2012
comment
Итак, я установил минимальный уровень API на com_actionbarsherlock на 11, и что вы знаете, это сработало! Спасибо! - person vurp0; 21.04.2012
comment
ABS предоставляет этот метод. Eclipse неверен/ADT недостаточно умен - person Jake Wharton; 22.04.2012
comment
@ Джейк У тебя есть другие предложения? После этого у меня возникли дополнительные проблемы с ClassNotFoundException в моем проекте, но я думал, что это не связано. Может быть это? Я могу создать еще один вопрос. - person vurp0; 22.04.2012
comment
Да, скорее всего, это не связано. Минимальный SDK для ABS — 7, и эти сообщения — просто предупреждения, а не ошибки. - person Jake Wharton; 23.04.2012
comment
Вы можете использовать supportInvalidateOptionsMenu() - person Oleg Vaskevich; 04.06.2012
comment
Да, просто используйте supportInvalidateOptionsMenu() - person tasomaniac; 19.02.2013
comment
Та же проблема только что застала меня в styles.xml - раздражает. Там lint утверждает, что <item name="android:displayOptions">showHome|useLogo</item> доступен только из SDK 11 на... вздох Хорошо, если это работает, раздражает то, что есть... - person Zordid; 27.08.2013
comment
Вам не нужно повышать уровень API, просто используйте supportInvalidateOptionsMenu(); если вы находитесь в действии, а если вы находитесь во фрагменте, используйте getActivity().supportInvalidateOptionsMenu(); - person Kaveesh Kanwal; 24.06.2015

Случилось со мной после запуска проверок Lint. Попробуйте щелкнуть правой кнопкой мыши проект панели действий Шерлока -> Инструменты Android -> Очистить маркеры ворса.

person Martin Nuc    schedule 23.04.2012
comment
Этот ответ является временным решением. Это не устраняет проблему, это просто заставляет Eclipse забыть, что проблема была. :/ - person AlbeyAmakiir; 06.03.2014
comment
Если вы повторно запустите проверки Lint, они пройдут после очистки. Это не заставляет Eclipse забыть о наличии проблемы. Первоначальный вопрос вообще не имел ничего общего с моим кодом. Я только что нашел этот вопрос во время моего поиска. - person Martin Nuc; 02.11.2014

Используйте ActivityCompat, предоставленный в банке поддержки.

person dbrown0708    schedule 30.12.2012
comment
это должен быть правильный ответ. Странно, почему вы не получили ни одного голоса за него. - person android developer; 13.02.2013

Все эти ответы неверны, кроме ответа dbrown0708, но я заявлю об этом больше

Вы можете использовать invalidateOptionMenu в более низком API, используя ActivityCompat As это предусмотрено в библиотеке поддержки v4

Синтаксис invalidateOptionsMenu(Activity activity);

код

ActivityCompat.invalidateOptionsMenu(this);

В API с 11 уровня

invalidateOptionsMenu();
person Mina Fawzy    schedule 29.12.2014

Попробуйте использовать import android.support.v4.app.Fragment в качестве библиотеки.

person Chris    schedule 17.01.2014