2013-11-30 3 views
3

Я следил за официальной программой обучения Android и на уроке «Управление жизненным циклом деятельности». Начав работу, есть фрагмент кода, который выглядит примерно так:Для вызова требуется уровень API 14 (текущий минимум равен 11)

public void onCreate(Bundle savedInstanceState) { 

    /* ... some other stuff ... */ 

    // Make sure we're running on Honeycomb or higher to use ActionBar APIs 
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { 
     // For the main activity, make sure the app icon in the action bar 
     // does not behave as a button 
     ActionBar actionBar = getActionBar(); 
     actionBar.setHomeButtonEnabled(false); 
    } 
} 

Когда я пишу это в моем тестовом приложении, однако, я получаю предупреждение от ADT говоря

вызов требует уровень API 14 (ток мин составляет 11): android.app.ActionBar # setHomeButtonEnabled

Мое приложение действительно является уровнем API уровня 11, как и должно быть в учебнике, но почему ADT действует так самодовольно, что мне это не принадлежит, когда вызов этого метода находится внутри блока, который проверяет текущий версия? Программа обучения продолжает убеждать меня, что это нормально, говоря:

Внимание: Использование SDK_INT для предотвращения старых систем от выполнения новых API, работает таким образом на Android 2.0 только (уровень API 5) и выше. В старых версиях будет встречаться исключение во время выполнения.

Но избежать выполнения ошибка не помогает, когда ADT не даже позвольте мне скомпилировать это.

ответ

9

но почему ADT действуя так самодовольно говорил мне, что это не принадлежит там, когда вызов этого метода находится внутри блока, который проверяет текущую версию

Да вы добавили его, но IDE ничего не знает о вас, проверяя версию через Build.

Просто добавьте @SuppressLint («NewApi») и ошибка исчезнет. Или вы можете создать сильфонные методы и использовать их в условиях:

@TargetApi(14) 
private void actionAPI14() { 
    getActionBar().setHomeButtonEnabled(false); 
} 

private void action() { 
    getSupportActionBar().setHomeButtonEnabled(false); 
} 

Вы всегда можете использовать пакет поддержки для более низких версий API.

+0

Как я уже сказал Abhishek Shukla ниже, я добавил пакет поддержки на одном из предыдущих уроков. Если он должен работать с пакетом поддержки, не подавляя ошибок от Lint, тогда должно быть что-то еще неправильно ... Ваш совет по подавлению ошибок Lint действительно работает, поэтому я могу по крайней мере продолжить свои уроки сейчас :) – 3Nex

+0

@ 3Nex приветствуется :) – Sajmon

+0

Обратите внимание, что если это абсолютно ясно, но для того, чтобы использовать панель действий поддержки, вам нужно использовать getSupportActionBar(), а не getActionBar(). Использование последнего приведет к ошибке и вызовет ошибку в API ниже 14. –

1

Почему вы не используете вспомогательную банку для обратной поддержки. Он будет работать и на более низких API.

+0

Я использую банку поддержки, также из одного из предыдущих уроков, и у меня есть строка «import android.support.v7.app.ActionBarActivity;», которая, я полагаю, должна работать нормально, поскольку она не сообщает никаких ошибки. – 3Nex

+0

Можете ли вы поделиться с ней стекем? –

+0

Не совсем так, потому что он не позволяет мне скомпилировать его вообще, говоря: «В вашем проекте содержатся ошибки (ошибки), исправьте их перед запуском приложения». Если я добавлю подавить Lint, то я не получу ошибок. – 3Nex

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

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