Как решить java.lang.nosuchmethoderror: android.widget.abslistview.isitemchecked

StackOverflow https://stackoverflow.com/questions/7306430

  •  25-10-2019
  •  | 
  •  

Вопрос

Я собираю проект Android против уровня API 11 (3.0), и у меня есть этот код:

if (parent instanceof AbsListView) {
    checked = ((AbsListView)parent).isItemChecked(position);
}

Когда я запускаю это в устройствах Pre-3.0 (ниже уровня API 11), я получаю эту ошибку:

java.lang.NoSuchMethodError: android.widget.AbsListView.isItemChecked

В Документация ABSLISTVIEW, isItemChecked Учитывается ли соблюдение API -уровня 1, то почему я получаю ошибку?

Это было полезно?

Решение

Видимо, это то, что происходит:

Со времени уровня API 1, Android Framework уже isItemChecked на ListView.

Однако при выпуске API -уровня 11 Google переместил определение isItemChecked к AbsListView, который является суперклассом ListView. Анкет Это изменение не предотвращает существующий код (предназначенный для компиляции против уровня 11 API 11) для компиляции против уровня API 11, но сгенерированный файл .class фактически ищет isItemChecked на AbsListView, которого не существует на устройствах до API 11-го уровня.

На Отчет о различиях API, это указано:

boolean isItemChecked(int) Метод был определен локально, но теперь унаследован от AbsListView.

Это опасная ловушка, потому что совместимость вообще не может быть проверена во время компиляции. Вы должны помнить, чтобы разыграть это как ListView и не AbsListView. Анкет Может мы должны избежать AbsListView Altogther.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top