SQLite veritabanından aldığım uzun bir nesne listesi var. Basitleştirme için, bir Event
nesnesinin Date
, Name
ve Location
özelliklerine sahip olduğunu varsayalım.Genişletilebilir ListView Öğeleri Gruplara Göre Ay/Ay
Ben kronolojik ListView
Event
lerini Aşağıdaki liste adaptörü kullanarak ve Date
göre sınıflandırılmaktadır veritabanından Event
s getirilirken olabilir.
public class ImageListButtonListAdapter extends ArrayAdapter<ImageListButtonListItem> {
public ImageListButtonListAdapter(Context c, List<ImageListButtonListItem> items) {
super(c, 0, items);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ImageListButtonView itemView = (ImageListButtonView)convertView;
if (null == itemView)
itemView = ImageListButtonView.inflate(parent);
itemView.setItem(getItem(position));
return itemView;
}
@Override
public void notifyDataSetChanged() {
super.notifyDataSetChanged();
}
}
Şimdiye kadar çok iyi. Şimdi bu liste çok uzun ve listeyi ExpandableListView
kullanarak daha da yapılandırmak ve Event
öğelerini ay olarak gruplamak istiyorum. BaseExpandableListAdapter
'dan türetilmiş bir liste bağdaştırıcısı oluştururken bulduğum örnekler genellikle önceden tanımlanmış gruplar ve grup adları içeriyordu. Her biri (Joda Time) LocalDate
'u içeren büyük bir öğe grubum var. Buna göre, sıralama için kullanılabilen hesaplanmış bir özellik YearMonth
ekleyebilirim.
İlk düşüncem, tüm listeyi bağdaştırıcıya iletmek ve bağdaştırıcıların grupları belirlemesine izin vermek ve bağdaştırıcıyı oluşturduktan sonra öğeleri gruplara atamaktı. Ancak, listenin tamamını bu şekilde işlemekten, grupların oluşturulmasından ve liste oluşturulmadan önce bu gruplara öğe atamasından, performansa duyarlı bir görünümde maliyetli bir işlem olacağından korkuyorum.
Bunun oldukça yaygın bir senaryo olduğunu ve bunu çözmek için daha zarif bir yol olduğunu hayal edebiliyorum. En iyi yaklaşım ne olurdu? Bir yanıt eklemek için
da gündeme sizin datamodel için kod eklemek olabilir. Verilerinizi "ListView" 'a koymadan önce neden doğru bir şekilde sipariş veremiyorsunuz? – Darwind
Evet, şimdi benim yaklaşımım buydu. Ve bir şekilde Lollipop'la ve daha sonra çalışmam lazım. Eski cihazlarda liste hala boş. Bazı kodları temizlerim ve kısa bir süre içinde soruyu ekleyeceğim. Teşekkürler. – jerry
Soruyu mevcut kodla güncelledim. Parçanın veri modeli hakkında - aşırı miktarda kod göndermekten kaçınmaya çalışarak - yeterli bilgiyi ortaya çıkarmasını umuyorum. – jerry