2010-07-22 14 views
8
yılında SimpleAdapter güncellemek için

bir SimpleAdapter güncellemek mümkün mü? Veri Listem ve "Sonraki Sonuçları Görün" yazan bir altbilgi var. Liste öğesi tıklandığında olayı yakalarım ve yeni veriler aldım. Ardından ListView'deki verileri bu yeni verilerle değiştirmek istiyorum ancak nasıl yapılacağını anlayamıyorum. Herhangi bir fikir? Bir ArrayAdapter kullanmak istemiyorum, çünkü görebildiğim kadarıyla öğeler sadece bir dizeyi tutabilir ve birden fazla dizge ve satır tutmak için ihtiyacım olan yere sahip olabilir.Nasıl Android

cevap

10

Güncelleme: del116 göre, gerçekten de SimpleAdapter bir değişken harita vermek ve güncellemek listeyi gerektiğinde daha sonra manuel adaptörünün notifyDataSetChanged yöntemini çağırabilirsiniz. Ancak, aşağıda benim noktam, SimpleAdapter'in statik veri için olduğunu belirten dökümantasyonu ile ilgili duruyor; Bunu mutable veri için kullanarak, onun tasarımına ters geliyor, bu yüzden eğer bu tekniği kullanırsanız, ortaya çıktıkça yeni Android sürümlerinde çalışmaya devam edip etmediğimi kontrol edeceğim.

(Orjinal açıklama

:) izler Eğer SimpleAdapter description bakarsanız öyle diyor "statik verileri bir XML dosyasında tanımlanan görüşlere eşleştirmek için kolay bir adaptör." Vurgulamayı ekledim - basitçe, SimpleAdapater değişmeyen verilerle kullanılmak üzere oluşturulmamış; Sadece statik verileri işler. Veri tek bir metin biraz daha vardır çünkü bir ArrayAdapter kullanamıyorsanız, o zaman kendi özel ListAdapter inşa veya DB veri koymak ve CursorAdapter s birini kullanmak zorunda kalacak ya. Eğer çok performans gerekmiyorsa

Son çare olarak, sen aracılığıyla kullanmak için liste görünümünü istediğiniz zaman veri değişikliklerini yepyeni SimpleAdapter örneğini oluşturmak ve anlatarak bir SimpleAdapter tarafından desteklenen bir ListView güncelleme olabilir setListAdapter. Performans değişebilir böylece

+4

burada Cevabınız gerçekten yanıltıcıdır. Dizi verilerini güncelledikten ve SimpleAdapter'imde notifyDataSetChanged() yöntemini çağırdıktan sonra, simpleAdapter dosyasını güncelleyebildim. NotifyDataSetChanged() öğesini çağırmak için ArrayAdapter kullanmaya gerek yoktur. – dell116

+1

@ dell116 Yeterince adil. Cevabımın sonunda bu olasılığa başvurdum, ancak geri bildirimlerinize göre aslında çalışmayı destekledim; Ben test etmemiştim. SimpleAdapter belgelerinin statik veriler için olduğunu özellikle belirttiğinden, böyle bir şeyi yapmanın bazı dikkati hak ettiğini hala devam ettiriyorum. –

+0

Geriye şimdi bakın ... vay. Programlama veya SimpleAdapter'ın amaçlanan amacı hakkında hiçbir şey bilmiyordum. Değiştirecek bir veri yapısı tarafından desteklenen bir ListView (veya herhangi bir AdapterView) kullanıyorsanız, SimpleAdapter kullanmayın. Foot.inMouth (doğru); – dell116

2

SimpleAdapter, statik veriler içindir. En iyi çözüm muhtemelen böyle ArrayAdapter olarak, adaptörün farklı türde bir geçiş veya yeni SimpleAdapter Eğer veri kümesi değiştirmek her zaman yapmaya edilir.

3
ListView lv= (ListView) findViewById(R.id.loglist); 
ArrayList<Map<String, String>> list = buildData(); 
String[] from = { "time", "message" }; 
int[] to = { R.id.logtime, R.id.logmessage }; 

adapter = new SimpleAdapter(getApplicationContext(), list,R.layout.log_list_row, from,to); 
lv.setAdapter(adapter); 

ListView'ü güncellemek için her seferinde bu işlevi çağırın. Bu yardımcı olur .. Yeni Verilerle liste değişkeni güncellemek zorunda Mind

Umut tutun .. :)

0

o yüzden benim SimpleAdapter güncelleme üzerinde çalışmaya notifyDataSetChanged() almak mümkün değildi bunun yerine ilk önce ListView ekleyerek removeAllViews() kullanarak ana düzenine bağlı olan tüm görünümleri kaldırmak çalıştı ve bu beni UI güncelleştirmek için izin çalıştı: güncellemeden sonra

LinearLayout results = (LinearLayout)findViewById(R.id.results); 
ListView lv = new ListView(this); 
ArrayList<HashMap<String,String>> list = new ArrayList<HashMap<String,String>>(); 
SimpleAdapter adapter = new SimpleAdapter(this, list, R.layout.directory_row, 
        new String[] { "name", "dept" }, new int[] { R.id.name, R.id.dept }); 

for (...) { 
    HashMap<String, String> map = new HashMap<String, String>(); 
    map.put("name", name); 
    map.put("dept", dept); 
    list.add(map); 
} 

lv.setAdapter(adapter); 
results.removeAllViews();  
results.addView(lv); 
-2
mySimpleAdapter.notifyDataSetChanged(); 

kullanın bu hat verilerdeki veriler HashMap liste

+0

dokümantasyonunu okuyunuz, SimpleAdapter üzerinde mümkün olduğu gibi mümkün değildir, SimpleAdapter bu tür eylemler için uygun değildir. – Manny265