Android - Get isChecked () voor items in AlertDialog?

Ik heb een AlertDialog gemaakt met checkbox-items met setMultiChoiceItems() . Ik heb een setPositiveButton() en setNegativeButton() aan het dialoogvenster toegevoegd.

Wanneer ik op de positieve knop druk, wil ik de lijst met items in het dialoogvenster doorlopen en bepalen of elk item is aangevinkt of niet. Maar het lijkt niet dat er een voor de hand liggende manier is om dit te doen.

Ik kan de lijst met items hieruit ophalen:

alertDialog.getListView().getItemAtPosition(n);

maar ik kan niet controleren of het item isChecked() of iets dergelijks. Over alles wat ik kan doen, print de tekst met behulp van .toString() .

De enige andere manier om te doen wat ik wil, is door de onMultiChoiceClickListener (). OnClick() te gebruiken om te luisteren wanneer een item is aangevinkt, en vervolgens te bepalen op welk item wordt geklikt en of het is aangevinkt of niet . Ik moet dan deze info opslaan in een array of lijst en vervolgens wanneer de positieve knop wordt ingedrukt, moet ik naar deze array verwijzen om te bepalen welke wordt gecontroleerd en welke niet. Ik weet dat deze methode zal werken, maar is er een programmatische manier om na te gaan of een item al dan niet is gecontroleerd?

1

2 antwoord

Ik vond mijn antwoord. Ik was gewoon op zoek naar de verkeerde methode.

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

Update. Dit is bugs

Ik sprak te snel. Ik denk dat ik met deze methode een Android-bug heb ontdekt. Als u een hoog aantal items in uw lijst hebt, tot het punt dat de lijst schuifbaar is en u door de lijst moet bladeren om ze te zien, komen items terug als ONGESCHAKELD, zelfs als ze standaard zijn aangevinkt als het item dat niet heeft gedaan scrolled al op het scherm. Ik heb dit hier gemeld.

2
toegevoegd

Het eenvoudigste en waarschijnlijk smerigste antwoord is om naar een CheckBox te casten     ((CheckBox) alertDialog.getListView() getItemAtPosition (n).) IsChecked ().;//doe een instanceof check voor de cast om een ​​ClassCastException te vermijden

De andere manier is om het waarschuwingsdialoogvenster uit te breiden (voeg een methode toe die de geselecteerde selectievakjes retourneert) of geef een object door (bundel of zo niet die de array of lijst bevat) die de geselecteerde items voor u houdt, in beide gevallen in dit geval u moet de onMultiChoiceClickListener (). onClick() gebruiken. U hoeft het niet te controleren nadat het feit in de array gewoon uit de array is verwijderd als het selectievakje niet is aangevinkt en toevoegen als het is aangevinkt in de onClick-methode. Of u kunt een kaart gebruiken (multimap zie: Google guava of apache) die een geselecteerde en niet-geselecteerde sleutel en het selectievakje (bij voorkeur het achtergrondobject) als waarde heeft.

HTH

2
toegevoegd