【问题标题】:How to fill Array List with Artist Names of Songs from another Array List如何用另一个数组列表中歌曲的艺术家姓名填充数组列表
【发布时间】:2014-07-16 20:48:05
【问题描述】:

所以我正在为音乐播放器制作一个示例播放列表,并且我正在尝试获取艺术家姓名和曲目标题。我已经成功地在 listFragment 中显示了这两个。然而,Artist Names 和 Title Tracks 都在不同的 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,然后尝试找到解决方法,但这似乎也没有用。

谢谢

【问题讨论】:

  • 你试过hashmap吗?
  • @JosefE。不,我没有。我是android开发的新手。不过我会调查的

标签: java android arraylist


【解决方案1】:

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

或者您可以在彼此之间维护您的值的 Hashmap 以供快速参考,这样当您想要其他东西时,它们的顺序无关紧要。排序后,根据您的排序从数据库中重新检索数据可能是明智之举。

【讨论】:

    【解决方案2】:

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

    class PlayerModel {
        private String songName;
        private String artistName;
    
        // override equals and hashCode.
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多