2016-04-09 23 views
0

Doğrudan veri kaynağında değişiklik yapmaya çalışıyorum ve herhangi bir değişikliğin adaptörünü uyarıyorum. Ama addAll() listemi güncellemiyor. Kodumda her şey yolunda gibi görünüyor, ama çalışma sırasında değil. Lütfen kodu düzeltmeme yardım edin. Şimdiden teşekkür ederim. Eğer pgs.clear() çağırdığınızdaListe <String> addAll() yöntemi eklenmiyor

List<String> tmppgs = pgs; 

Dolayısıyla, tek bir listede olduğunu boşaltıyor:

List<String> pgs = myClass.getPgs(); 
    List<String> tmppgs = pgs; 

    /* 
    . 
    lots of code for string processing which results in >> String content for each i 
    . 
    */ 

    for (int i = 0; i < tmppgs.size(); i++) { 
    tmppgs.set(i, content); 
    } 

    Toast.makeText(getActivity(),String.valueOf(tmppgs.size()), Toast.LENGTH_LONG).show(); 
    // Toast shows desired result which is OK. 

    pgs.clear(); 
    pgs.addAll(tmppgs); 
    Toast.makeText(getActivity(),String.valueOf(pgs.size()), Toast.LENGTH_LONG).show(); 
    //Unexpectedly shows zero 

    mAdapter.notifyDataSetChanged(); 
} 
+2

'tmppgs == pgs'. İkisini de temizliyorsun. – Marvin

+0

Hayır, ilk kızarmış ekmek doğru sonuçları gösterir. Sorun pgs.clear() 'dan başlıyor. – infiniteLoop

+0

Sadece bir tahmin, Listeyi denediniz mi? tmppgs = new ArrayList (pgs); ? –

cevap

1

pgs ve temppgs aynı ArrayList nesne vardır. pgs.addAll(tmppgs)'un hiçbir etkisi olmayacaktır, çünkü boş bir listenin içeriğini kendisine eklemeye çalışıyorsunuz.

Neden ilk olarak clear() ve addAll() yapıyorsunuz belirsiz. Amacınız, set() çağrıları ile değiştirilen listeye geçmekse ... bu listeyi zaten set() çağrıları ile değiştiriyorsunuz. Sadece clear() ve addAll() satırlarını yorumlayın (ve artık ihtiyacınız olmadığından tmppgs'dan kurtulun).

+0

Yanıt için @CommonsWare teşekkür ederiz. Söylediğim gibi, listenin yeniden başlatılması, eski listeye bir bellek başvurusu olduğundan, bağdaştırıcıyı etkilemeyeceğinden, doğrudan geçerli başvuruda hareket etmem gerekiyor. – infiniteLoop

+0

@ ab0001368: Bu yüzden, cevabımın ikinci paragrafında yazdıklarımı yap. – CommonsWare

+0

Listenin sıfır boyutunu döndürerek çözülen tmppgs yerine doğrudan pgs değiştirdim. Ancak recyclerview öğeleri güncellemede beklenmedik şekilde davranır. Listenin boyutu 3'tür (recyclerview 3 web sayfasını gösterir). birinci ve ikinci öğeler güncellenmez. ama 3 güncellenmiş ürün (3 metin) üçüncü web sayfasında gösterilmektedir !!! – infiniteLoop

0

Sizin için çalışmak zorundadır

List<String> tmppgs = pgs; 

List<String> tmppgs = myClass.getPgs();; 

geçebilirsiniz.