Java 如何使用游标载入器获取特定专辑的歌曲?
我正在尝试用android中的游标载入器创建一个基本的音乐播放器。 其想法是让活动具有两个列表视图,一个显示相册,另一个显示特定选定相册的歌曲 以下是我主要活动的代码:Java 如何使用游标载入器获取特定专辑的歌曲?,java,android,android-cursorloader,Java,Android,Android Cursorloader,我正在尝试用android中的游标载入器创建一个基本的音乐播放器。 其想法是让活动具有两个列表视图,一个显示相册,另一个显示特定选定相册的歌曲 以下是我主要活动的代码: public class AlbumCursorLoader extends Activity implements LoaderCallbacks<Cursor> { private static final int LOADER_ALBUM_ID = 1; private static final int LOA
public class AlbumCursorLoader extends Activity implements LoaderCallbacks<Cursor> {
private static final int LOADER_ALBUM_ID = 1;
private static final int LOADER_SONGS_ID = 2;
AlbumsAdapter mAdapter;
AlbumSongsAdapter mSongsAdapter;
CursorLoader AlbumCursor;
CursorLoader SongsCursor;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_album_cursorloader);
mAdapter = new AlbumsAdapter(this, null);
mSongsAdapter = new AlbumSongsAdapter(this,null);
ListView AlbumList = (ListView) findViewById(R.id.listviewid_albumart);
ListView SongsList = (ListView) findViewById(R.id.listviewid_albumsongs);
AlbumList.setAdapter(mAdapter);
SongsList.setAdapter(mSongsAdapter);
getLoaderManager().initLoader(LOADER_ALBUM_ID, null, this);
getLoaderManager().initLoader(LOADER_SONGS_ID, null, this);
AlbumList.setOnItemClickListener(new OnItemClickListener(){
public void onItemClick(AdapterView<?> parent, View v, int position,long id) {
//Have to display the songs on clicking the album list.
}
});
}
public Loader<Cursor> onCreateLoader(int id, Bundle args) {
String select = null;
switch(id){
case LOADER_ALBUM_ID:
String[] mProjection =
{
MediaStore.Audio.Albums._ID,
MediaStore.Audio.Albums.ALBUM_ART,
MediaStore.Audio.Albums.ALBUM_KEY
};
AlbumCursor = new CursorLoader(this, MediaStore.Audio.Albums.EXTERNAL_CONTENT_URI,mProjection, select, null, null);
return AlbumCursor;
case LOADER_SONGS_ID:
String[] mProjection1 =
{
MediaStore.Audio.Media.DATA,
MediaStore.Audio.Media._ID,
MediaStore.Audio.Media.TITLE,
MediaStore.Audio.Media.DISPLAY_NAME,
MediaStore.Audio.Media.MIME_TYPE,
};
SongsCursor = new CursorLoader(this, MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,mProjection1, select, null, null);
return SongsCursor;
default:
return null;
}
}
public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
switch (loader.getId()){
case LOADER_ALBUM_ID:
mAdapter.swapCursor(data);
break;
case LOADER_SONGS_ID:
mSongsAdapter.swapCursor(data);
break;
}
}
public void onLoaderReset(Loader<Cursor> loader) {
switch (loader.getId()){
case LOADER_ALBUM_ID:
mAdapter.swapCursor(null);
break;
case LOADER_SONGS_ID:
mSongsAdapter.swapCursor(null);
break;
}
}
}
现在我的疑问是,当我点击某张专辑时,如何获得该专辑的歌曲?
我知道如何通过硬编码专辑名称来查询特定专辑中的歌曲,但如何在单击特定专辑时获取专辑歌曲?它应该是动态的
我尝试了另一种方法,使用普通光标(不带光标加载程序),将光标设置到特定的位置光标;在OnlistItem中,单击ListActivity
protected void onListItemClick(ListView l, View v, int position, long id) {
if (cursor.moveToPosition(position)) {
String[] columns = { MediaStore.Audio.Media.DATA,
MediaStore.Audio.Media._ID,
MediaStore.Audio.Media.TITLE,
MediaStore.Audio.Media.DISPLAY_NAME,
MediaStore.Audio.Media.MIME_TYPE, };
String where = android.provider.MediaStore.Audio.Media.ALBUM
+ "=?";
String whereVal[] = { cursor.getString(cursor
.getColumnIndex(MediaStore.Audio.Albums.ALBUM)) };
String orderBy = android.provider.MediaStore.Audio.Media.TITLE;
cursor = managedQuery(
MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, columns,
where, whereVal, orderBy);
String[] displayFields = new String[] { MediaStore.Audio.Media.DISPLAY_NAME };
int[] displayViews = new int[] { android.R.id.text1 };
setListAdapter(new SimpleCursorAdapter(this,
android.R.layout.simple_list_item_1, cursor,
displayFields, displayViews));
}
}
类似地,将游标装入器的游标设置到数据库中的特定位置的方法是什么?
我想对游标装入器使用类似的逻辑。
请帮我解决这个问题。
如果需要进一步澄清,请告知我
protected void onListItemClick(ListView l, View v, int position, long id) {
if (cursor.moveToPosition(position)) {
String[] columns = { MediaStore.Audio.Media.DATA,
MediaStore.Audio.Media._ID,
MediaStore.Audio.Media.TITLE,
MediaStore.Audio.Media.DISPLAY_NAME,
MediaStore.Audio.Media.MIME_TYPE, };
String where = android.provider.MediaStore.Audio.Media.ALBUM
+ "=?";
String whereVal[] = { cursor.getString(cursor
.getColumnIndex(MediaStore.Audio.Albums.ALBUM)) };
String orderBy = android.provider.MediaStore.Audio.Media.TITLE;
cursor = managedQuery(
MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, columns,
where, whereVal, orderBy);
String[] displayFields = new String[] { MediaStore.Audio.Media.DISPLAY_NAME };
int[] displayViews = new int[] { android.R.id.text1 };
setListAdapter(new SimpleCursorAdapter(this,
android.R.layout.simple_list_item_1, cursor,
displayFields, displayViews));
}
}