Comment résoudre java.lang.NoSuchMethodError: android.widget.AbsListView.isItemChecked

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

  •  25-10-2019
  •  | 
  •  

Question

Je compile un projet Android contre API Level 11 (3.0) et j'ai ce code:

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

Quand je lance cette pré-3.0 (inférieure à l'API de niveau 11) périphériques, je reçois cette erreur:

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

AbsListView , isItemChecked est indiqué comme ayant API de niveau 1 compatibilité, alors pourquoi dois-je obtenir l'erreur?

Était-ce utile?

La solution

Apparemment, c'est ce qui se passe:

Depuis l'API de niveau 1, le cadre Android a déjà isItemChecked sur ListView.

Cependant, la sortie de l'API de niveau 11, Google a déplacé la définition de isItemChecked à AbsListView, qui est la superclasse de ListView. Ce changement ne code empêche pas existant (destiné à la compilation par rapport au niveau pré-API 11) pour compiler contre API de niveau 11, mais le fichier .class généré ressemble réellement pour isItemChecked sur AbsListView, qui n'existe pas sur le niveau pré-API 11 appareils .

Sur le rapport API Différences , il est dit:

boolean isItemChecked(int) méthode a été définie localement, mais est maintenant héritée de AbsListView.

Ceci est un piège dangereux, parce que la compatibilité ne peut pas être vérifiée sur la compilation de temps. Vous devez vous rappeler de le jeter comme ListView et non AbsListView. Peut-être que nous devrions éviter AbsListView altogther.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top