2012-04-22 22 views
11

Kendi özel bağdaştırıcısını BaseAdapter'den genişletilmiş bir liste görünümü ve benzeri göstermek için yaptım ...Android: Sabit kimlikleri olan bir adaptör nasıl oluşturulur?

Tek ve çoklu seçimi desteklemesini istiyorum, bu nedenle kararlı kimliklere sahip olması gerekir. ADAPTER.hasStableIds() ile kontrol ettik ve sonuç yanlış.

Hiç şanssız ahır kimliklerini almaya çalışmak için bu yöntemi geçersiz kıldım.

public long getItemId(int position) { 
    return (long) getItem(position).hashCode(); 
} 

Nasıl yapılacağı hakkında bir fikriniz var mı? teşekkürler!

cevap

18

Doğru dönmek için hasStableIds geçersiz kılın. Ayrıca, bağdaştırıcınızdaki verilere ya hashCode() geçersiz kılmalı ya da getItemId adresinde döndürülecek bir tür kimlik alanı olmalıdır.

+1

Vay, basit ve kolay bir çözüm. Teşekkürler! – giorgiline

+5

hashCodes benzersiz değildir ve varsayılan uygulama id olarak konumunu kullanır. HashCode öğe tanımlayıcılarıyla nasıl ilgilidir? –

+0

@Petr: Anladığım kadarıyla "Durağan Ids", benzersiz bir sayı kullanarak nesnelerinizi/satırlarınızı her zaman tanımlamanız anlamına gelir (yani, adaptörünüzün kullanım ömrü boyunca hiçbir zaman değiştirmeyin). Bu nedenle, aynı şekilde HashMap için hashCodes benzersiz/çakışmaya ihtiyacınız varsa, burada HashCode'u Adaptörünüzde yeniden kullanabilirsiniz. –

İlgili konular