2015-08-30 2 views
7

После обновления SDK (23), я получаю эту ошибку lint, я не вносил никаких изменений в свой код и работал отлично на устройствах с уровнем api 9. Также я не вызываю android.app.Activity # onCreateView в моем коде вообще. Если я нажму кнопку автофиксировать, он поместит @SuppressLint («NewApi») в объявление класса @SuppressLint("NewApi") public class MyActivity extends android.support.v4.app.FragmentActivity, как это, и ошибка исчезнет, ​​я хочу быть уверенным, что это путь.Для вызова требуется уровень API 11 (текущий минимум 9) android.app.Activity # onCreateView

+0

Возможный дубликат [Для вызова требуется уровень API 11 (текущий мин. 8) android.app.Activity # onCreateView] (http://stackoverflow.com/questions/32181705/call-requires-api-level-11current-min -is-8-android-app-activityoncreateview) – Murmel

ответ

6

Я столкнулся с той же проблемой.

Если вы посмотрите на Javadoc для класса активности (http://developer.android.com/reference/android/app/Activity.html#onCreateView%28android.view.View,%20java.lang.String,%20android.content.Context,%20android.util.AttributeSet%29), вы увидите, что метод общественности Посмотреть onCreateView (Посмотреть родитель, имя String, контекст Контекст, AttributeSet ATTRS) был добавлен в API 11 .

Вместо использования @SuppressLint («NewApi») на уровне объявления класса я добавил этот конкретный метод к моему коду и подавил предупреждение lint для объявления метода. Как так:

@SuppressLint("NewApi") 
public View onCreateView(View parent, String name, Context context, AttributeSet attrs) 
{ 
    if(Build.VERSION.SDK_INT >= 11) 
     return super.onCreateView(parent, name, context, attrs); 
    return null; 
} 

Таким образом, любые будущие дополнения к коду класса равно будут проверяться пухом, но ворс остановит этот метод маркировки с ошибкой.

ETA: Javadoc для класса указывает, что оба метода onCreateView (...) возвращают значение null в качестве поведения по умолчанию и что метод pre API 11 имеет пустую реализацию.

+0

Это не ответ, потому что их код вообще не вызывает/переопределяет 'onCreateView'. Это ошибка в Android SDK; [здесь проблема для звезды] (https://code.google.com/p/android/issues/detail?id=188677). – nkorth

+0

@nkorth, 'onCreateView' вызывается андроидом 'при раздувании с помощью LayoutInflater, возвращаемого getSystemService (Class).' Api docs говорят так, прямо здесь, в ссылке, которую я предоставил, которую вы не удосужились прочитать. Во-вторых, речь шла об использовании @SuppressLint для подавления предупреждения, а не об источнике ошибки. Но вам нелегко найти ссылку на него. – user5292387

1

@SuppressLint («NewApi») - это аннотация, используемая инструментом Android Lint.

Что-то в вашем коде не является оптимальным или может привести к сбою. Пропустив NewApi там, вы подавляете все предупреждения, которые говорят вам, если вы используете какие-либо API введенные после minSdkVersion

Для получения дополнительной информации и принять решение выглядеть Android Lint проверка: HERE

Также вы можете использовать @ TargetApi.

Разница заключается в том, что с помощью @TargetApi вы объявляете через параметр какой уровень API, который вы указали в своем коде, чтобы ошибка могла появиться снова, если позднее вы модифицируете метод, чтобы попытаться ссылаться на нечто более новое, чем Уровень API, указанный в @TargetApi.

@TargetApi - лучшая аннотация, позволяет рассказать инструменты сборки «Хорошо, я исправил эту категорию проблем» более тонко.

+0

На самом деле я вообще не хочу использовать аннотации, и я также не нуждаюсь в них, потому что мой код вообще не использует Activity # onCreateView. Ошибка возникает из-за самого андроида api. Я пытаюсь найти лучший обходной путь для собственной ошибки андроида. Ваш ответ полезен, и спасибо за это, однако он не отвечает на мой фактический вопрос. – user65721

0

Как уже упоминалось пользователем5292387, oncreateview был добавлен. Вместо того, чтобы подавлять пуха я использовал

@TargetApi(Build.VERSION_CODES.HONEYCOMB) 
@Override 
public View onCreateView(View parent, String name, Context context, AttributeSet attrs) 
{ 
    return Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB ? 
     super.onCreateView(parent, name, context, attrs) : 
     super.onCreateView(name, context, attrs); 
} 

Первый вызов супер для устройств, работающих под управлением ОС Android Honeycomb и выше. Второй вызов супер - для устройств с меньшим, чем Honeycomb Android OS. Я думаю, что он выглядит чище, а не возвращает null. Однако в документации по android указывается, что возвращение null приведет к поведению по умолчанию. Любое решение должно работать, однако я скептически отношусь к возврату null, поскольку это может иметь неблагоприятные последствия в более поздних версиях Android SDK.

0

Кое-что, что кажется всем отсутствующим, заключается в том, что он использует FragmentActivity из библиотеки поддержки v4. По определению этот класс должен быть полностью совместим с Android API 4. Предупреждение не должно выдаваться, поскольку FragmentActivity предоставляет собственную реализацию onCreateVivew().

Мне кажется, это ошибка Lint.

Я думаю, что @SupressLint («NewAPI») - это самый простой способ обойти ошибку Lint (поскольку я не считаю, что это ошибка вообще). Также помните, что ошибки Lint не являются ошибками компиляции. Это советы для вас, что у вас могут быть проблемы с вашим кодом, или есть лучший способ сделать это.

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