【问题标题】:Populate a listview with artist name?用艺术家姓名填充列表视图?
【发布时间】:2015-08-24 04:08:47
【问题描述】:

我目前正在制作一个媒体播放器,我整天都在寻找如何制作一个显示手机中所有艺术家的新列表视图。

列表类型,如果您单击它,它将转到该艺术家的专辑列表,然后是歌曲等

我知道我必须做的事情的范围是使用 MediaStore 来整理它,但我只是难住了。

有什么帮助吗?我什至没有代码可以关闭,因为我一直在尝试并删除我一直在做的事情

【问题讨论】:

  • 这是题外话,但仍然checkout
  • 这是一个helpful tutorial,在过去帮助我理解和实施ListViews。
  • @LX 是的,我将它用于我的主要歌曲列表,显示手机上的所有歌曲,但现在我只想要一个艺术家列表,这就是我卡住的地方,我做艺术家视图的另一个适配器来填充它,如果是这样,那么正确的 MediaStore 内容代码是什么,以查询正确的内容
  • 阅读MediaStore.Audio.Artists文档

标签: java android listview mediastore


【解决方案1】:

我明白一无所有甚至不知道从哪里开始寻找的感觉。

无论如何,我使用以下代码获取艺术家列表。

public ArrayList<ArtistItem> getArtistList() {
   ArrayList<ArtistItem> artistList = new ArrayList<ArtistItem>();
        Uri uri = MediaStore.Audio.Artists.EXTERNAL_CONTENT_URI;
        String[] projection = new String[] {MediaStore.Audio.Artists._ID, MediaStore.Audio.ArtistColumns.ARTIST, MediaStore.Audio.ArtistColumns.NUMBER_OF_TRACKS};
        Cursor musicCursor = getContentResolver().query(uri, projection, null, null, null);

        int idColumn = musicCursor.getColumnIndex(MediaStore.Audio.Artists._ID);
        int titleColumn = musicCursor.getColumnIndex(MediaStore.Audio.ArtistColumns.ARTIST);
        int numColumn = musicCursor.getColumnIndex(MediaStore.Audio.ArtistColumns.NUMBER_OF_TRACKS);
        // Iterate over the List
        if(musicCursor!=null && musicCursor.moveToFirst()) {

            //add songs to list
            do {
                String id = musicCursor.getString(idColumn);
                String title = musicCursor.getString(titleColumn);
                String num = musicCursor.getString(numColumn);
                if(title == null || title.equals(MediaStore.UNKNOWN_STRING)) {
                    title = "Unknown Artist";
                }
                if(num.equals("1")) {
                    num = num + " Song";
                } else {
                    num = num + " Songs";
                }
                artistList.add(new ArtistItem(thisId, thisTitle, thisNum));
            }  while (musicCursor.moveToNext());
        }
        return artistList;
    }

    public class ArtistItem{
        private String id;
        private String title;
        private String num;

        ArtistItem(String theId, String theTitle, String theNum) {
            id = theId;
            title = theTitle;
            num = theNum;
        }
        // TODO Implement getters and setters for id, title and num
    }

【讨论】:

  • 抱歉垃圾邮件,但如果您喜欢我的回答,能否将 API 级别 23 的 android.jar 文件发送给 john.precursor ATGMAILDOT COM?请?我真的需要在我的平板电脑上使用它,但我的笔记本电脑被炸了。
  • 为什么你们总是遍历 Cursor 以获取然后传递给 ArrayAdapter 的列表,而您可以直接将其传递给 SimpleCursorAdapter
  • @pskink 我更喜欢使用 BaseAdapter 自定义我的 ListView。我认为我不能将光标传递给 BaseAdapter。好吧,从技术上讲我可以,但我发现 ArrayList 在 BaseAdapter 中更易于使用。
  • 我说:"when you can pass it (a Cursor) directly to SimpleCursorAdapter",所以请使用 SimpleCursorAdapter,不要让你的生活变得更艰难
  • @pskink 是的,您可以...使用 SimpleCursorAdapter。但是你的列表项可以有多个带有 SimpleCursorAdapter 的 TextView 吗?我需要定制,所以我使用 BaseAdapter。而且我发现将 ArrayList 传递给 BaseAdapter 更好。我不认为在 BaseAdapter 中使用游标会很有效。你不觉得吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-28
  • 1970-01-01
相关资源
最近更新 更多