Come utilizzare setMultiChoiceItems () con un AlertDialog personalizzato che utilizza un arrayadapter efficienza?
-
25-09-2019 - |
Domanda
Sto scrivendo un lettore musicale che utilizza una scheda personalizzata che si estende BaseAdapter (adattatore efficienza) che voglio visualizzazione in un AlertDialog
utilizzando setAdapter()
cui l'utente può fare clic su una delle canzoni di passare a quella posizione nella playlist OR controllare le canzoni per rimuovere dalla playlist. Ho provato ad utilizzare un custom click ascoltatore in modo che un utente potrebbe semplicemente lungo fare clic per rimuovere l'elemento dalla lista, ma il listview
semplicemente non funziona bene ... si stava togliendo gli articoli errati (quelli alla fine), anche se il ArrayList
conteneva gli elementi corretti playlist ... (quando ho rimosso l'elemento dalla ArrayList
, ho passato alla scheda in cui si chiedeva notifyDataSetChanged
... ma che semplicemente non ha funzionato come ho già detto. C'è sicuramente un bug nel AlertDialog ListView
... perché non c'è ragione per questo di aver spuntato fuori i risultati alla fine piuttosto che l'articolo corretto.
Quindi ... il metodo successivo vorrei provare è quello di utilizzare il metodo setMultiChoiceItems()
del AlertDialog
... ma sembra che non funziona con un adattatore personalizzato ... solo gli array semplici. Dovrò sottoclasse AlertDialog
e Override
il metodo setMultiChoiceItems()
o c'è un modo per farlo funzionare con un ArrayAdapter
?
In sostanza, non riesco a capire come per uniformare iterate lista che la AlertDialog
crea o se si passa anche quella vista in qualche modo. Inoltre, non credo che posso anche ascoltare i clic sui checkboxes
se aggiungo quelli alla fila. Qualsiasi aiuto sarà molto apprezzato.
EDIT: Fare domande qui è come per magia ... ho risposto alla mia domanda ... questo è come lo ho fatto. Ho aggiunto un suggerimento per ogni checkbox
che è la posizione dell'elemento nella ArrayList
. Poi ho usato OnCheckedChangeListener
per catturare le selezioni. Quando si imposta un suggerimento si aggiunge testo al checkbox
... dal momento che lo sfondo del AlertDialog
è bianco (anche per gli elementi cliccato?) Ho appena impostato il colore del testo suggerimento per trasparenti.
holder.check.setHintTextColor(Color.TRANSPARENT);
holder.check.setHint(String.valueOf(position));
holder.check.setOnCheckedChangeListener(new OnCheckedChangeListener() {
public void onCheckedChanged(CompoundButton buttonView,
boolean isChecked) {
int position = Integer.parseInt((String) buttonView.getHint());
Log.v("onCheckedChanged", "Checked: "+isChecked+" returned: "+position+" which should be "+getItem(position).name);
}
});
Soluzione
poi
Passare un riferimento a byte [] in setMultiChoiceItems().
final boolean[] booleans = {false, true, false, true, false, false, false};
Poi controllare il valore di booleans
all'interno setPositiveButton().
Se avete bisogno di passare questo AlertDialog
intorno, quindi estendere AlertDialog
e hanno creare un campo booleano, come descritto in 1.