java - 无需加载额外的光标即可获取给定媒体商店类型的成员数量

标签 java android mediastore

我在 RecyclerView 中显示了设备中存在的所有流派的列表,在BindViewHolder 上获取媒体存储查询的内容。我还想显示每种流派的歌曲数量以及流派的名称。我有流派 ID 并且可以得到计数

int count;
            String[] projection = {MediaStore.Audio.Genres.Members.AUDIO_ID};
            String selection = MediaStore.Audio.Genres.Members.IS_MUSIC + "!=0";
            Uri uri = MediaStore.Audio.Genres.Members.getContentUri("external", id);
            Cursor tempcursor = fragmentActivity.getContentResolver().query(uri, projection, selection, null, null);
            if(tempcursor != null) {
                count = tempcursor.getCount();
                tempcursor.close();
            }

但是,由于我在 onBindViewHolder 中获取流派光标内容,因此我不能进行额外的查询,这会妨碍滚动的流畅性。有一个名为 MediaStore.Audio.Genres._COUNT 的字段,但它在运行时没有给出此类列发现错误。如果有人能指出一个解决方案,保持滚动可接受,并且不会大幅改变我目前的应用程序结构,那将非常有帮助。提前致谢

最佳答案

这是我在应用程序“新播放列表管理器”中执行此操作的方式

      public int getgenre_Count(Context context, long genreID) {
    final String track_id = MediaStore.Audio.Genres.Members._ID;
    final ContentResolver resolve = context.getContentResolver();
    Uri uri = MediaStore.Audio.Genres.Members.getContentUri("external",
            genreID);
    final String[] columns = {track_id};
    Cursor cur = resolve.query(uri, columns, null, null, null);
    int genrecnt = 0;
    if (cur != null && cur.moveToFirst()) {
        genrecnt = cur.getCount();
        cur.close();
    }
    return genrecnt;
}

我在适配器中执行此操作,并且表现良好。

关于java - 无需加载额外的光标即可获取给定媒体商店类型的成员数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41432264/

相关文章:

java - 图表示基准

java - 获取随机列作为字符串列表

android - 将 sqlite 查询打印到 logCat

android - 图像高度不包含 ListView 中的内容

android - 在ListView中列出音频和视频文件

java - 使用 telnet 和服务器套接字连接到您自己的 PC。每次连接都被拒绝

java - 如何在 Java 测试文件中使用 ScalaTest?

android - 重新创建 Activity 并传递参数

android - 使用视频的 ID (Mediastore) 获取视频的 URI

android - 在 Android 中显示来自 SD 卡的大图像