Yanıtlar:
Bunlar , farklı satırlar için farklı görünüm türleri istediğiniz durumun üstesinden gelir . Örneğin, bir kişi uygulamasında satırların bile sol tarafta resimlerin olmasını ve tek sıraların sağ tarafta resimlerin olmasını isteyebilirsiniz. Bu durumda şunları kullanırsınız:
@Override
public int getViewTypeCount() {
return 2;
}
@Override
public int getItemViewType(int position) {
return position % 2;
}
Çerçeve , yönteminizde hangi görünümlerin size aktarılacağına karar vermek için görünüm türünüzü kullanırconvertViewgetView . Başka bir deyişle, yukarıdaki örnekte, çift sıralarınız yeniden kullanılmak üzere yalnızca sol taraftaki resimlere sahip geri dönüşümlü görünümler alacak ve tek sıralar yalnızca sağ taraftaki resimlere sahip olanları alacaktır.
Listenizdeki her satır aynı düzene sahipse, görünüm türleri hakkında endişelenmenize gerek yoktur. Aslında, BaseAdapter.java tüm bağdaştırıcılar için varsayılan bir davranış sağlar:
public int getItemViewType(int position) {
return 0;
}
public int getViewTypeCount() {
return 1;
}
Bu aslında her satır için aynı görünüm türünü sağlar.
Düzenle - genel akışı özetlemek için:
AdapterViewbir adaptör kullanarak bağlarsınız.AdapterViewÇalışır kullanıcı tarafından görülebilir öğeleri görüntülemek için.getItemViewTypesatır gerektiriyorn bu ekrana üzeredir satır.ntürünün görünümleri açısından kontrol eder . Herhangi bir görüş bulunamamıştır çünkü henüz hiçbir görünüm geri dönüştürülmemiştir.getViewsatır için çağrılır n.getItemViewTypeiçin satır çağırın n.getViewve satır görünümü kullanıcıya gösterilir.Şimdi, bir görünüm ekranın dışına kaydırılarak geri dönüştürüldüğünde, çerçeve tarafından yönetilen geri dönüştürülmüş görünümler havuzuna gider. Bunlar esas olarak görünüm türüne göre düzenlenir, böylece yönteminizdeki convertViewparametrede size doğru türden bir görünüm verilir getView:
getItemViewTypegörüntülemek istediği satırı gerektirir.convertViewparametre olarak size iletilir getView.İçinde farklı bakış türünü göstermek gerekirse kullanımına sonra onun iyi listesinin-görüntüleyebilir getViewTypeCount()ve getItemViewType()bir görünümü geçiş yerine adaptörü View.GONEve View.VISIBLEçok pahalı bir görev içinde olabilir getView()liste kaydırma etkileyecektir.
Lütfen bunu Adaptörde getViewTypeCount()ve getItemViewType()Adaptörde kullanın .
Bağlantı: getviewtypecount'un kullanımı
Outttt izleyin !!!!
Uygulamakta bir sorunla karşı karşıya kaldımListViewDün ve satırları kaydırdıktan hemen sonra iki tür görünüm karıştırıldı. Bu konudaki en iyi oylanan cevap iyi bir genel açıklama verse de, bahsettiğim yukarıdaki UI hatasını durdurmak için en önemli bilgiyi vurgulamamıştır.
İşte benim açıklama şudur:
Hem getViewTypeCount()ve getItemViewType()tarafından kullanılmakta olan BaseAdapter'ın getViewyöntemi geri dönüşümlü ve geri getirme gereken bir bakış hangi tip öğrenmek için. ) Ancak bu iki yöntemi Android API Dokümanına göre sezgisel olarak uygulamıyorsanız, bahsettiğim soruna girebilirsiniz.
Uygulanması için Özet Yönerge:
birden fazla türde uygulamak Viewsiçin ListViewbireyin biz aslında uygulamak zorunda sıralar, getItemViewType()ve getViewTypeCount()yöntemlerle. Ve getItemViewType()dokümantasyon bize aşağıdaki gibi bir Not verir:
Not: Tamsayılar, aralığında
0olmalıdırgetViewTypeCount() - 1.IGNORE_ITEM_VIEW_TYPEayrıca iade edilebilir.
Bu nedenle getItemViewType(), Görünüm Türü için değerleri 0'dan başlayarak son türe (tür sayısı - 1) olarak döndürmelisiniz. Örneğin, yalnızca üç tür görüşünüz olduğunu varsayalım? Görünüm için veri nesnesine bağlı olarak, Bu yüzden, sadece geri dönebilirler 0 ya da 1 ya da 2 arasından getItemViewType()sıfır tabanlı dizi indeksi gibi yöntem. Kullanılan üç tür görünümünüz olduğundan, getViewTypeCount()yönteminiz 3 döndürmelidir.
Her durumda, bu yöntem için 1, 2, 3 veya 111, 222, 333 gibi başka bir tamsayı döndürürseniz, Android API Dokümanına uymadan yerleştirdiğiniz yukarıdaki kullanıcı arayüzü hatasını kesinlikle yaşayabilirsiniz.
İpucu alamadıysanız veya hala çözemediyseniz ve daha fazla bilgiye ihtiyacınız varsa, lütfen bu StackOverflow Q&A iş parçacığındaki ayrıntılı cevabımı okuyun .
İpucu hakkında daha fazla bilgi edinmek için Android Geliştirici Belgesini okuyun .
Umarım bu cevap bir sürü saat kurtarmak için orada birine yararlı olabilir !!!
Alkış !!!
IGNORE_ITEM_VIEW_TYPEListView birinde hata vardı. 1 resim ve 2 metin görünümünden oluşan bir görünüm eklemek için ArrayAdapter kullandım. Yalnızca bir görünüm türüm vardı. Ya yöntemi getItemViewType geçersiz kılmak ya da konumu veya sabit kodlu bir tamsayı döndürerek geçersiz kılmak için çalıştı. Her durumda, kaydırma sırasında garip davranışla (yinelenen değişiklikler) listemde kopyalar yaşıyordum. Geri dönen IGNORE_ITEM_VIEW_TYPEyöntemde sorunu giderilmiştir. Teşekkürler.