2010-08-05 37 views
7

Ich schreibe einen Musik-Player, der einen benutzerdefinierten Adapter Erweiterung BaseAdapter (Effizienz-Adapter) verwendet, die ich in AlertDialog mit setAdapter() anzeigen möchte, wo der Benutzer entweder auf einen der Songs klicken kann, um zu dieser Position in der Playlist wechseln oder überprüfen Songs, die aus der Playliste entfernt werden sollen. Ich versuchte mit einem benutzerdefinierten Klick-Listener, so dass ein Benutzer nur lange klicken konnte, um das Element aus der Liste zu entfernen, aber die listview funktioniert einfach nicht richtig ... es war das Entfernen der falschen Elemente (die am Ende), obwohl die ArrayList enthielt die richtigen Playlist-Einträge ... (als ich das Objekt aus der ArrayList entfernte, übergab ich es an den Adapter, der notifyDataSetChanged rief ... aber das funktionierte einfach nicht wie ich erwähnt. Es gibt definitiv einen Fehler in der AlertDialog ListView ... weil es keinen Grund dafür gibt, dass die Ergebnisse vom Ende anstatt vom richtigen Punkt ausgegeben wurden.Wie verwendet man setMultiChoiceItems() mit einem benutzerdefinierten AlertDialog, der einen Effizienz-Arrayadapter verwendet?

Also ... die nächste Methode, die ich ausprobieren möchte, ist die setMultiChoiceItems() Methode der AlertDialog ... aber es scheint, dass es nicht mit einem benutzerdefinierten Adapter funktioniert ... nur einfache Arrays ll Ich muss AlertDialog und Override die setMultiChoiceItems() Methode Unterklasse oder gibt es eine Möglichkeit, ich kann es mit einer ArrayAdapter arbeiten lassen?

Grundsätzlich kann ich nicht herausfinden, wie man sogar die Liste iteriert, die die AlertDialog erstellt oder ob sie diese Ansicht irgendwie auch passiert. Außerdem glaube ich nicht, dass ich sogar Klicks auf checkboxes hören kann, wenn ich diese zur Reihe hinzufüge. Jede Hilfe wird sehr geschätzt.

EDIT: Fragen hier ist wie Magie ... Ich beantwortete meine eigene Frage ... so habe ich es getan. Ich fügte einen Hinweis zu jedem checkbox hinzu, der die Position des Artikels in der ArrayList ist. Dann habe ich OnCheckedChangeListener verwendet, um die Auswahl zu erfassen. Wenn Sie einen Hinweis setzen, fügt es Text der checkbox ... hinzu, da der Hintergrund der AlertDialog weiß ist (sogar für angeklickte Gegenstände?) Ich stellte nur die Farbe des Hinweistextes zu transparentem ein.

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);       
    } 

}); 
+0

Ihre Frage wird von Ihnen auf Ihre eigene Frage beantwortet. Versuchen Sie, den Text zu kopieren/einzufügen, und verwenden Sie den Antwortmechanismus ordnungsgemäß. – Pabluez

Antwort

3

Siehe This und This

dann Pass einen Verweis [auf Byte] in setMultiChoiceItems().

final boolean[] booleans = {false, true, false, true, false, false, false}; 

Dann setPositiveButton().

den Wert booleans innen überprüfen Wenn Sie übergeben müssen dies AlertDialog um, dann erweitern AlertDialog und haben ein Feld boolean wie in 1. beschrieben

Verwandte Themen