2011-10-28 24 views
10

Bir Aktivitede bir ListView var ve ListView'a özel bir adaptör ayarlıyorum. Android'de adaptörler, statik iç sınıflar veya statik olmayan iç sınıflar olmalıdır

benim adaptör sınıfı olmalı:

private static class MyAdapter extends ArrayAdapter 

veya

private class MyAdapter extends ArrayAdapter 

Ben sürece adaptör aktivite referans içinde kapalı ama teyit etmek istedik olarak hiçbir fark sanırım.

+0

(Gelecek okuyucular için) Son soru geriye doğrudur. Statik bir iç sınıfa sahipseniz ve etkinliğe/içeriğe erişmeniz gerekiyorsa, bir WeakReference kullanmalısınız (etkinliği geçebilecek herhangi bir şey varsa). Eğer sınıf statik ve iç değilse, dış sınıfa örtük güçlü bir referansı vardır. Bu durumda, adaptörün nasıl kullanıldığına hala dikkat etmeniz gerekir. Statik kullanımı, örtülü sızıntıların bulunmasına yardımcı olabilir, ancak bir bağlam/zayıf yönün etrafından geçerken ek yük ekler. – lilbyrdie

+0

Ayrıca, bir View nesnesini alan bir bağdaştırıcıya yapılan çağrılarda, içerik kullanılabilir (View.getContext()). Etkinliğinizden emin olmak için instanceof'i kullanabilirsiniz. – lilbyrdie

cevap

15

Bağdaştırıcıyı nasıl kullanacağınıza dikkat ederseniz, bir bağdaştırıcıdan gelen içeriğe ulaşmak iyidir. Adaptörler genellikle İçeriklerinin (Etkinlik) yaşam döngüsüne bağlıdır, bu yüzden iyidir. Bir WeakReference'ı yalnızca mantıklıysa kullanın.

+0

"Bağdaştırıcıyı nasıl kullanacağınıza dikkat etmek" bölümüne daha fazla detay verebilir misiniz? Bu yüzden, adaptörden beri ikisinden hangisinin Activity life döngüsüne bağlı olduğu önemli değil. – dnkoutso

+1

Bağdaştırıcıyı, örneğin etkinliklerinizden daha uzun süre durağan bir alanda tutmayın. –

+0

@RomainGuy onDestroy() 'içindeki statik bağdaştırıcı nesnesini açıkça" null "yapıp yapmadığımızı öğrenin? iyi bir yaklaşım mı? –

İlgili konular