2014-07-16 42 views
1

因此,我正在爲音樂播放器製作示例播放列表,並且正在嘗試獲取藝術家姓名和曲目標題。我已經在listFragment中成功顯示了這兩個。然而,藝術家名稱和標題曲目都在不同的ArrayLists中,並分別檢索。因此,當我嘗試對一個列表進行排序時,每件事情都會搞砸。如何使用另一個陣列列表中的藝術家名稱填充陣列列表

代碼檢索標題

public void findAllMusicFilesTitles() { 

    Uri uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI; 
    String[] projection = { MediaStore.Audio.AudioColumns.DATA, MediaStore.Audio.AudioColumns.TITLE }; 
    Cursor audioCursor = getActivity().getBaseContext().getContentResolver().query(uri, projection, null, null, null); 

    if (audioCursor != null) { 
     while (audioCursor.moveToNext()) { 
      songarray.add(audioCursor.getString(audioCursor.getColumnIndex(MediaStore.Audio.AudioColumns.TITLE))); 
      } 
     audioCursor.close(); 
    } 
} 

代碼檢索藝術家姓名

public void findAllMusicFilesArtists() { 

    Uri uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI; 
    String[] projection = { MediaStore.Audio.AudioColumns.DATA, MediaStore.Audio.AudioColumns.ARTIST }; 
    Cursor audioCursor = getActivity().getBaseContext().getContentResolver().query(uri, projection, null, null, null); 

    if (audioCursor != null) { 
     while (audioCursor.moveToNext()) { 
      artistarray.add(audioCursor.getString(audioCursor.getColumnIndex(MediaStore.Audio.AudioColumns.ARTIST))); 
     } 
     audioCursor.close(); 
    } 
} 

ListFragment的onCreate()方法在那裏我做了排序

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    songarray = new ArrayList<String>(); 
    artistarray = new ArrayList<String>(); 

    findAllMusicFilesTitles(); 
    findAllMusicFilesArtists(); 

    Collections.sort(songarray, String.CASE_INSENSITIVE_ORDER); 

    playlistArrayAdapter adapter = new playlistArrayAdapter(getActivity().getBaseContext(), songarray, artistarray); 
    setListAdapter(adapter); 

    } 

你可以請建議解決這個問題。我有一個創建另一個ArrayList與歌曲URL的想法,然後試圖找到一個方法,但似乎也沒用。

謝謝

+0

你試過了散列表嗎? –

+0

@JosefE。不,我沒有。我是Android開發新手。不過,我會考慮這一點 –

回答

1

你可以使用光標重新檢索根據您的排序值列表數據庫中的信息。

或者你可以維護一個你的值之間的Hashmap以便快速參考,以便當你想從另一箇中得到某些東西時它們在什麼順序並不重要。排序後,根據您的排序重新從數據庫中檢索數據可能是明智的。

1

您應該圍繞歌曲名稱和藝術家名稱創建自定義封裝。然後使用這個類作爲你的適配器的支持模型,然後有一個自定義的比較器來根據你想要排序的任何字段對你的模型進行排序。

class PlayerModel { 
    private String songName; 
    private String artistName; 

    // override equals and hashCode. 
}