2012-01-16 7 views
8

Yani,:Android - Bir AlertDialog'ta verileri yenile? Ben şöyle bir AlertDialog oluşturursanız

AlertDialog.Builder b = new AlertDialog.Builder(); 
b.setItems(MyStringArray, MyListener); 
b.create().show(); 

Sonra listedeki öğeleri güncellemek istiyorsanız, yani myStringArray fazla veya daha az öğe olması değişti. Bunu yapmanın bir yolunu bulamıyorum. Şimdiye kadar, ListView'i AlertDialog'dan almayı denedim, ama çalışmak için .setAdapter elde edemiyorum. Bu doğru yaklaşım mı yoksa bunu yapmanın daha iyi bir yolu var mı?

cevap

9

Bunu kendim denemedim, ancak oluşturduğum tüm diğer uygulamalardan, sorununun çözüleceğine eminim.

yerine setItems kullanmak yerine, setAdapter() yöntemini kullanmayı deneyin ve String ait Array senin verilerle başlatıldı bir ArrayAdapter geçmek. Ardından, verilerin değiştiğini öğrendiğinizde, View nesnesini almak için getListView()'u kullanabilirsiniz ve oradan da doğrudan veri kümesiyle birlikte çalışmak için getAdapter()'u arayın. Bunu temizleyebilir ve isterseniz onu yeniden başlatabilir ya da öğeleri istediğiniz gibi ekleyebilir/kaldırabilirsiniz. Bağdaştırıcı nesnesinden, notifyDataSetChanged() numaralı telefonu çağırırsanız, bağdaştırıcıya yeni sağladığınız yeni veri kümesini kullanarak yeniden çizmeyi tetiklemeniz gerekir.

Bu size yardımcı olur umarım. Olmazsa haber ver. Eğer benim gibi olan ve Multichoice öğeleri için örneğin varsayılan adaptörü kullanmak istiyorsanız

DSC

+0

Hala bir acemi biraz değilim. DialogInterface.OnClickListener'ı OnClickListener olarak mı tutmalıyım yoksa normal bir Listede görüntüleyebildiğim gibi bir View.OnClickListener kullanmalı mıyım? – Paul

+0

Sadece bunu denediğimde bunu sormamda aptalca. DialogInterface.OnClickListener gitmenin yolu gibi görünüyor. – Paul

1

ardından da bir yolu yoktur.

Diğer tüm bağdaştırıcılarda olduğu gibi, dize dizi nesnesini güncelleştirdiğinizde, bağdaştırıcı örneğinden bağdaştırıcıyı alın, uygun bağdaştırıcıya dönüştürün ve geçersiz kılın. Bu diyaloglarda çalışırken

AlertDialog.Builder b = new AlertDialog.Builder(); 
b.setItems(MyStringArray, MyListener); 
AlertDialog instance = b.create(); 
instance.show(); 

// Later when you need to update 
MyStringArray[0] = "puf"; 
ListView list = instance.getListView(); 
// Now according to whether you used cursor or array for supplying items to the builder 
// you have to cast adapter to either CursorAdapter or ArrayAdapter 
ArrayAdapter adapter = (ArrayAdapter)list.getAdapter(); 
adapter.notifyDataSetChanged(); 

You can find out more here.