Beiträge von DaveX78

    Hier mal der Quellcode:



    Momentan habe ich zum testen 8 Titel als .mp3 auf der SDKarte. Um hier keine Werbung zu machen, die Titel sind folgendermaßen gespeichert:

    Code
    {mp3Path=/storage/emulated/0/artist - song1.mp3, mp3Title=artist - song1}
    {mp3Path=/storage/emulated/0/artist - song2.mp3, mp3Title=artist - song2}
    {mp3Path=/storage/emulated/0/artist - song3.mp3, mp3Title=artist - song3}
    {mp3Path=/storage/emulated/0/artist - song4.mp3, mp3Title=artist - song4}
    {mp3Path=/storage/emulated/0/artist - song5.mp3, mp3Title=artist - song5}
    {mp3Path=/storage/emulated/0/artist - song6.mp3, mp3Title=artist - song6}
    {mp3Path=/storage/emulated/0/artist - song7.mp3, mp3Title=artist - song7}
    {mp3Path=/storage/emulated/0/artist - song8.mp3, mp3Title=artist - song8}

    Habe ich beispielsweise Song1, Song3, Song7 und Song8 ausgewählt, gibt mir println() folgendes aus:



    Code
    System.out: {mp3Path=/storage/emulated/0/artist - song1.mp3, mp3Title=artist - song1} <-richtig
    System.out: Unchecked <- richtig
    System.out: {mp3Path=/storage/emulated/0/artist - song7.mp3, mp3Title=artist - song7} <-falsch
    System.out: Unchecked <- richtig
    System.out: Unchecked <- richtig
    System.out: Unchecked <- richtig
    System.out: {mp3Path=/storage/emulated/0/artist - song1.mp3, mp3Title=artist - song1} <-falsch
    System.out: {mp3Path=/storage/emulated/0/artist - song1.mp3, mp3Title=artist - song1} <-falsch

    UPDATE:
    Okay - ich konnte das Problem beheben. :)


    Ich habe diese Code-Zeile:

    Java
    String item = listView.getAdapter().getItem(checked.keyAt(i)).toString();

    durch die folgende ersetzt:

    Java
    String item = listView.getItemAtPosition(i).toString();

    Nun werden die ausgewählten Songs 100% richtig angezeigt. ;)

    Der OnClickListener für den Button namens "isChecked" hatte ich sowieso nur zum testen eingebaut. :)
    Ansonsten werde ich mir deinen Vorschlag, eine Klasse die alle Daten enthält, auf jeden Fall durch den Kopf gehen lassen.
    Ich hatte mir für mein konkretes Beispiel folgendes ausgedacht:

    Ist meiner Meinung nach nicht so schön, sollte aber funktionieren. Leider ist mir aber nun ein anderes Problem aufgefallen. :(
    Habe ich jetzt eben erst bemerkt. Entweder verzettelt sich irgendwie die get()-Methode des SparseBooleanArray-Objekts "checked", oder irgendwas geht schief bei den listView-Methoden getAdapter().getItem(...).
    Denn lasse ich mir testweise bei jedem Durchlauf der Schleife den String item mittels System.out.println() ausgeben, werden die falschen Songs angezeigt. Nur die die eben nicht ausgwählt sind, werden richtig angezeigt, nämlich mit "unchecked" - oder wenn alle ausgewählt sind, dann werden auch alle richtig ausgegeben. Finde ich irgendwie seltsam und komme auch nicht drauf wieso das so ist. Denn eigentlich passt ja alles.

    Hallo Christopher,


    erstmals danke für die Antwort. Die Position oder die ID ist nicht das Problem. Sondern eher das Vorgehen. Ich weiß nicht wie man mein Vorhaben für gewöhnlich umsetzt.
    Zum testen habe ich mal folgendes gemacht:


    Die Ausgabe ist folgende (wenn beispielsweise ein Item ausgewählt ist):

    Code
    {mp3Path=/storage/emulated/0/artist - song.mp3, mp3Title=artist - song}

    Also müsste ich diesen String splitten und dann in einer Hashmap<String, String> den Teil mp3Path=/.. (was auch den Schlüssel darstellt) im ersten <String, ...> und den Teil mp3Title=... im zweiten <..., String> speichern, richtig?


    Gibt es auch eine elegantere Vorgehensweise?


    Edit:
    Mit eleganter meine ich z.B. die Tatsache, dass man den Inhalt einer ArrayList<HashMap<String, String>> mittels einem Adapter in eine ListView übertragen kann. Aber umgekehrt wäre zumindest mir nicht bekannt, dass es auch so elegant geht. Deshalb meine beiden Fragen.

    Hallo zusammen,


    ich bin neu hier im Forum und hätte auch gleich mal eine Frage zu einem Problem.


    Ich versuche zur Zeit einen MP3-Player für Android umzusetzen. Funktioniert soweit alles ganz gut.
    Doch momentan ist es so, dass der Benutzer nur eine Songliste hat und von dieser Liste einen Song zum Abspielen auswählen kann. Natürlich wird dann immer automatisch der nächste Song abgespielt.


    Nun möchte ich aber folgendes umsetzen:
    Es soll eine Songliste geben, von der man einen, mehrere oder alle Songs auswählen kann (per CheckBox) und diese dann einer Playliste hinzufügt.


    Ich habe eine Klasse namens MP3Finder geschrieben, die alle Songs, die sich auf der SD-Karte befinden, ermittelt und in einer ArrayList mit einer HashMap<String, String> speichert. In der MP3Finder-Klasse habe ich eine Methode defniert >>getMP3List()<<, die diese ArrayList<HashMap<String, String>> zurückgibt.


    In meiner SongListActivity habe ich ein ListView das die ganzen Songs aus diesem ListArray<HashMap<>> mittels CheckedTextView-Items auflistet.
    Nun will ich wie bereits weiter oben erwähnt, dass alle ausgewählten Songs (gesetztes Häkchen) in einer neuen ArrayList<HashMap... gespeichert werden, die ich dann mittels einem Intent der PlayListActivity übergeben möchte.


    Doch leider habe ich absolut keine Ahnung, wie ich die ListView-Items der HashMap übergeben soll. Das übergeben bzw. speichern der HashMap-Daten in die ListView habe ich ja mittels einem Adapter umgesetzt. Aber wie macht man das umgekehrt?


    Google spuckt nur Beispiele aus, wie man Daten aus einer HashMap in einer ListView speichert. Umgekehrt habe ich leider keine Beispiele finden können. Daher hoffe ich, dass Ihr mir dabei helfen könnt. :)


    Ich hoffe ihr habt in etwa verstanden, was ich gerne umsetzen möchte. Ich hoffe ihr könnt mir dabei helfen. Ich würde mich jedenfalls sehr freuen.


    Grüße DaveX78