2017-05-04 5 views
0

Ich baue Musik-Player App für die ich das Sammeln von Daten von SD-Karte, die vom Server heruntergeladen und Dateien in Arraylist Namen speichernerhalten Index von Arraylist <HashMap <String, String >>

private ArrayList<HashMap<String, String>> songsList = new ArrayList<HashMap<String, String>>(); 

Nun ist die Problem ist, ich möchte mp3-Datei nach dem Benutzer klicken Sie auf Recycler-Element, so dass ich Indexnummer für den bestimmten Namen.

Wie bekomme ich einen Index für die Weitergabe des Namens der MP3-Datei ??

/** 
    * Function to read all mp3 files from sdcard 
    * and store the details in ArrayList 
    */ 
    public ArrayList<HashMap<String, String>> getPlayList() { 
     File home = new File(MEDIA_PATH); 

     if (home.listFiles(new FileExtensionFilter()).length > 0) { 
      for (File file : home.listFiles(new FileExtensionFilter())) { 
       HashMap<String, String> song = new HashMap<String, String>(); 
       song.put("songTitle", file.getName().substring(0, (file.getName().length() - 4))); 
       song.put("songPath", file.getPath()); 

       Log.d(TAG, "getPlayList() called title = "+file.getName().substring(0, (file.getName().length() - 4))+" Path = "+file.getPath()); 
       // Adding each song to SongList 
       songsList.add(song); 
      } 
     } 
     // return songs list array 
     return songsList; 
    } 
+3

Ich rate Ihnen, eine 'Song' Klasse statt Speichern von Eigenschaften in einer HashMap –

+0

ja, POJO wäre eine gute Option, aber ich habe bereits HashMap implementiert, so dass es eine Zeit dauern wird zu implementieren und Änderungen in allen Klassen. –

Antwort

2

Mit Ihrer Konstruktion, könnten Sie Schleife über die Liste, um die Karte zu finden müssen Sie

int indexForSongName(String songName) { 
    ArrayList<HashMap<String, String>> playlist = getPlayList(); 

    for (int i = 0; i < playlist.size(); i++) { 
     HashMap<String, String> map = playlist.get(i); 
     if (map.containsValue(songName)) { // Or map.getOrDefault("songTitle", "").equals(songName); 
      return i; 
     } 
    } 

    return -1; // Not found. 
} 

Das heißt, rate ich Ihnen, einen Song-Klasse zu machen, anstatt Eigenschaften in einer HashMap speichern kann. Es ist eine gute Übung und würde solche Aufgaben erleichtern.

+0

Ich werde versuchen Sie Ihre Antwort und lassen Sie wissen –

+0

Vielen Dank, Genie seine Arbeit wie Charme und ich werde Ihren Rat in Zukunft erinnern –

Verwandte Themen