如何使用另一个阵列列表中的歌曲的艺术家名称填充阵列列表

时间:2014-07-16 20:48:06

标签: java android arraylist

所以我正在为音乐播放器制作一个示例播放列表,我正在尝试获取艺术家姓名和曲目标题。我已经在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);

    }

请您建议解决此问题。我有一个想法,创建另一个带有歌曲URL的ArrayList,然后试图找到一种方法,但这似乎也没用。

谢谢

2 个答案:

答案 0 :(得分:1)

您可以使用游标根据已排序的值列表重新检索数据库中的信息。

或者你可以在一个彼此之间保持你的价值观的Hashmap以便快速参考,这样当你想要另一个的东西时它们的顺序并不重要。排序之后,根据您的排序重新检索数据库中的数据可能是明智的。

答案 1 :(得分:1)

您应该围绕歌曲名称和艺术家名称创建自定义包装器。然后使用此类作为适配器的支持模型,然后使用自定义比较器根据要排序的字段对模型进行排序。

class PlayerModel {
    private String songName;
    private String artistName;

    // override equals and hashCode.
}