2011-09-05 14 views
5

android.widget.AbsListView.isItemChecked ve bu kod var: Ben bu çalıştırdığınızdajava.lang.NoSuchMethodError çözmek için: API Seviye 11 (3.0) karşı bir Android projesi derleme

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

3.0'dan (API Seviye daha düşük 11) cihazlarda, bu hatayı alıyorum: AbsListView documentation yılında

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

, isItemChecked API Seviye 1 uyumluluğu sahip olarak belirtilmiştir, neden ben hata alıyorum? API Seviye 1, Android çerçeve ListView zaten isItemChecked sahiptir

beri:

cevap

10

Görünüşe olacağı da bu. Ancak, API Düzey 11'in yayımlanmasında, Google, isItemChecked tanımını ListView'un üst sınıfı olan AbsListView olarak değiştirmiştir. Bu değişiklik, API Düzey 11'e karşı derleme yapmak için varolan kodu önleme (API öncesi 11 Düzeyine karşı derleme anlamına gelir) değil, oluşturulan .class dosyası aslında API API'sı 11 öncesi aygıtlarda bulunmayaniçin isItemChecked'u arar. . API Differences Report günü

, buyurulmaktadır:

boolean isItemChecked(int) Method was locally defined, but is now inherited from AbsListView .

Bu tehlikeli bir tuzak olduğunu, uyumluluk hiç derleme zamanında kontrol edilemez çünkü. ListView ve AbsListView olarak yayınlamayı unutmayın. Belki de AbsListView altogther'den kaçınmalıyız.

+2

AbsListView belgeleri düzeltilmelidir. API 1'de kesinlikle eklenmedi. Aynı şey "AbsListView.setAdaper" için de geçerli ancak güncellendi. – xmen

İlgili konular