Android - AlertDialog'daki öğeler için isChecked () öğesini aldınız mı?

setMultiChoiceItems() kullanarak onay kutusu öğeleriyle bir AlertDialog oluşturdum. İletişim kutusuna setPositiveButton() ve setNegativeButton() ekledim.

Pozitif tuşa bastığımda, İletişim kutusundaki öğeler listesinde yinelemek ve her birinin kontrol edilip edilmediğini belirlemek istiyorum. Fakat bunu yapmanın açık bir yolu yok gibi görünüyor.

Öğelerin listesini buradan alabilirim:

alertDialog.getListView().getItemAtPosition(n);

ancak isChecked() öğesinin veya bunun gibi bir şeyin olup olmadığını kontrol edemiyorum. Yapabileceğim her şey için .toString() 'i kullanarak Metni yazdırın.

İstediğimi yapmanın diğer bir yolu, bir öğenin ne zaman kontrol edildiğini dinlemek için onMultiChoiceClickListener() .Click() 'i kullanmak ve sonra hangi öğenin tıklandığını ve kontrol edilip edilmediğini belirlemektir. . Sonra bu bilgiyi bir dizide veya listede saklamak zorundayım ve sonra pozitif tuşa basıldığında, hangisinin kontrol edildiğini ve olmadığını belirlemek için bu diziye başvurmam gerekiyor. Bu yöntemin işe yarayacağını biliyorum, ancak bir maddenin kontrol edilip edilmediğini kontrol etmenin programlı bir yolu var mı?

1

2 cevap

Cevabımı buldum. Sadece yanlış yöntemi arıyordum.

Solution alertDialog.getListView().isItemChecked(position);

Güncelle. Bu adam

Çok erken konuştum. Sanırım bu yöntemle bir Android hatası keşfettim. Listenizde çok sayıda öğeniz varsa, listenin kaydırılabilir olduğu ve listeyi görmek için listeyi aşağı kaydırmanız gerektiğinde, öğenin varsayılan olarak işaretlenmemiş olmasına rağmen öğeler UNCHECKED olarak geri gelir. ekrana kaydırdı henüz. Burada bildirdim.

2
katma

En kolay ve muhtemelen en kirli cevap bir CheckBox'a yayınlamaktır     ((CheckBox) alertDialog.getListView() getItemAtPosition (n)). İsChecked (.);//ClassCastException'ı önlemek için oyunculardan önce bir kontrol yapın

Diğer yol ise, uyarı iletişim kutusunu genişletmek (seçilen onay kutularını döndürecek bir yöntem eklemek) veya seçili öğeleri sizin için tutacak bir nesne (demet ya da diziyi veya listeyi tutan neyin olmadığını) iletmektir. onMultiChoiceClickListener (). onClick() yöntemini kullanması gerekir. Dizideki gerçeği işaretlemeniz gerekiyorsa, kutucuğu işaretlenmemişse ve onClick yönteminde işaretlenmişse ekleyin. Ya da, anahtar olarak ve onay kutusu (tercihen arka plan nesnesi) değeri olarak seçilmiş ve seçili olmayan bir haritayı (multimap bkz: Google guava veya apache) kullanabilirsiniz.

HTH

2
katma