Как решить java.lang.nosuchmethoderror: android.widget.abslistview.isitemchecked
-
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.