web-gelistirme-sc.com

ArrayAdapter’taki öğelerin tümünü alma

ListFragmenttarafından doldurulan bir ArrayAdaptertarafından desteklenen bir Loadervar. Kullanıcı öğelerden birini tıkladığında, seçilen öğeye bir referans ve liste öğelerinin geri kalanını başka bir parçaya iletmek istiyorum. Sorum şu: adaptördeki tüm parçaları nasıl almalıyım? İşte gördüğüm olanaklar:

1. Destek için bir referans tutun List

Bağdaştırıcıyı şöyle oluşturun:

List<DomainObject> items = new ArrayList<DomainObject>();
listAdapter = new ArrayAdapter<DomainObject>(getActivity(), R.layout.mine, items);

ve ardından itemsveya bir kopyasını bir sonraki aktiviteye iletin.

Bunu gördüğüm dezavantajı, yapıcıya ilettiğim listenin daha sonra öğeleri içerdiği belgelenmemiş gerçeğe dayanıyor olmam.

2. Bağdaştırıcıyı yinele

Bir öğe tıklandığında, bağdaştırıcıyı yinele ve listeyi oluştur. Bu gereksiz miktarda iş gibi görünüyor. Öğeler, adaptördeki Listiçinde bulunur ve her öğeyi manuel olarak yeni bir listeye kopyalarım.

3. Adaptöre eklerken ayrı bir öğe listesi tutun

Bağdaştırıcıya bir öğe eklemeden önce, parçada sakladığım ayrı bir listeye ekleyin. Bu ayrıca, ürün listesi ArrayAdapterve parçasına kopyalandığı için de zararlıdır.

14
scompt.com

Bu arada kullandığım çözüm sadece ArrayAdapter kullanmamak. Bu API'ye karşı mücadele ettiğiniz durumlarda, sadece daha az özellikli (ve karmaşık) BaseAdapter işlevini kullanmak daha iyi görünüyor. Bu makalede BaseAdapter yerine ArrayAdapter ile karar verme hakkında daha fazla bilgi edinebilirsiniz: Android Adapter Good Practices .

7
Edward Dale

Oyuna biraz geç kaldım ama benzer bir sorunla karşı karşıya kaldım.

# 1 ile başa çıkmanın bir yolu, listenin referansını ArrayAdapter alt sınıfı içinde tutmaktır, böylece yeniden kullanımınız adaptör nesnesi tarafından kontrol edilir.

Gibi bir şey:

public class DomainAdapter extends ArrayAdapter<DomainObject> {

    private final List<DomainObject> items;

    public DomainAdapter(Context context, List<DomainObject> items) {
        super(context, R.layout.mine, items);
        this.items = items;
    }

    public List<DomainObject> getItems() {
        return items;
    }
}
31
theisenp

En iyi yöntem "Listeye bir referans tutmak" AMA "items" değişkeni/parametresini Yapıcıya iletmemek:

List<DomainObject> items = new ArrayList<DomainObject>(); listAdapter = new ArrayAdapter<DomainObject>(getActivity(), R.layout.mine);

Bu şekilde ArrayList'i yalnızca boş bir dizi olarak başlatırsınız ve SİZİN listenizi kendiniz yönetmeniz gerekir.

0
emandt

Hızlı bir test, yöntem 1'in işe yaradığını söylüyor. En hızlı ve en temiz gibi görünüyor, ancak belgelenmemiş olduğundan, onu ArrayAdapter'in alt yapısının değişmesi durumunda planlanan platformlar arasında test etmek isteyip istemediğiniz zaman test etmek isteyebilirsiniz.

Derleme SDK sürüm 22 ve Min SDK Sürüm 10 kullanıyorum.

0
yesennes