【发布时间】:2013-09-20 22:08:21
【问题描述】:
我可以列出 mediastore 中的所有歌曲,但我也想按艺术家/专辑/文件夹/流派/播放列表对它们进行排序。
我通常使用游标查询自己的数据库,但这在这种情况下无效,我必须使用适配器。我可以通过更改参数来查询它,但我不知道如何在适配器中对其进行分组(我找不到如何添加/使用 GROUPBY),这意味着我需要适配器中的每个艺术家/专辑/文件夹/..只有一次,不是每首歌。
我试图通过互联网搜索,但没有找到答案。我也在这里找到了一些主题,但对我来说仍然不清楚。因此,我想请您在此 example 上向我展示这一点:
package com.exercise.AndroidListMedia;
import android.app.ListActivity;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.provider.MediaStore;
import android.provider.MediaStore.Video.Media;
import android.view.View;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import android.widget.Toast;
public class AndroidListMediaActivity extends ListActivity {
SimpleCursorAdapter adapter;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
String[] from = {
MediaStore.MediaColumns.TITLE};
int[] to = {
android.R.id.text1};
Cursor cursor = managedQuery(
MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
null,
null,
null,
MediaStore.Audio.Media.TITLE);
adapter = new SimpleCursorAdapter(this,
android.R.layout.simple_list_item_1, cursor, from, to);
setListAdapter(adapter);
}
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
Cursor cursor = adapter.getCursor();
cursor.moveToPosition(position);
String _id = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media._ID));
String title = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.TITLE));
String artist = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.ARTIST));
String album = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.ALBUM));
int duration = cursor.getInt(cursor.getColumnIndex(MediaStore.Audio.Media.DURATION));
String info = "_ID: " + _id + "\n"
+ "TITLE: " + title + "\n"
+ "ARTIST: " + artist + "\n"
+ "ALBUM: " + album + "\n"
+ "DURATION: " + duration/1000 + "s";
Toast.makeText(this, info, Toast.LENGTH_LONG).show();
}
}
感谢您的任何想法。
【问题讨论】:
-
我为解决这个问题所做的是创建了一个名为
CursorToListAdapter的类,它不是ArrayAdapter的兄弟,这意味着适配器就像你将它安装到光标一样,你可以像使用它一样使用它列表。然后,您可以将其传递给 ArrayAdapter(当然是getView的子类)来显示它,这方面的指南对您有帮助吗? (这是一个非常好的设计模式,但如果我误读了这个问题,我不会写它:P) -
嗨,Alec,是的,如果你能这么好心,我将不胜感激:)
标签: android listview adapter mediastore