Cómo solucionar java.lang.NoSuchMethodError: android.widget.AbsListView.isItemChecked

Estoy compilando un proyecto de Android contra API Nivel 11 (3.0) y tengo este código:

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

Cuando ejecuto esto en pre-3.0 (más bajo que el API Level 11) los dispositivos, consigo este error:

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

En la documentación de AbsListView , isItemChecked se indica que tiene compatibilidad con el nivel 1 de API, ¿por qué obtengo el error?

Aparentemente esto es lo que sucede:

Desde API Nivel 1, el framework de Android ya ha sido isItemChecked en ListView .

Sin embargo, en el lanzamiento de API Nivel 11, Google movió la definición de isItemChecked a AbsListView , que es la superclase de ListView . Este cambio no evita que el código existente (destinado a compilar contra el Nivel 11 anterior a la API) se compile contra el Nivel 11 de la API, pero el archivo .class generado busca realmente isItemChecked en AbsListView , que no existe en los dispositivos pre-API Level 11 .

En el informe de diferencias API , se afirma:

boolean isItemChecked(int) método se definió localmente, pero ahora se hereda de AbsListView .

Esta es una trampa peligrosa, porque la compatibilidad no se puede comprobar en tiempo de compilación en absoluto. Debe recordar convertirlo en ListView y no en AbsListView . Tal vez deberíamos evitar AbsListView altogther.

  • Llamar a un método en el proceso del sistema sin un error de usuario calificado
  • Utilización de `onRetainCustomNonConfigurationInstance` para conservar los datos a través de los cambios de configuración
  • ¿Hay alguna diferencia en el uso de Context.getText y Context.getResources.getText?
  • ¿Qué es "android:" prefijo en el módulo android framework-res
  • ¿Cómo funciona Choreographer?
  • Android "Marco de aplicaciones" Docs / Tuts
  • Cualquier otra fuente oficial de una sola parada para las directrices de desarrollo de Android, aparte de sitio de desarrollador?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.