public class TTActivity extends ListActivity {
private String[] mCursorCols;//columns
TrackListAdapter mAdapter;
Cursor mTrackCursor;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mTrackCursor = null;
mCursorCols = new String[] {
MediaStore.Audio.Media._ID,
MediaStore.Audio.Media.TITLE,
MediaStore.Audio.Media.DATA,
MediaStore.Audio.Media.ALBUM,
MediaStore.Audio.Media.ARTIST,
MediaStore.Audio.Media.ARTIST_ID,
MediaStore.Audio.Media.DURATION
};
mAdapter = new TrackListAdapter(this, R.layout.track_list_item, null, new String[]{}, new int[]{},this);
setListAdapter(mAdapter);//fill data
getTrackCursor(mAdapter.getQueryHandler());
}
Cursor getTrackCursor(TrackListAdapter.TrackQueryHandler queryHandler){
Cursor ret ;
StringBuilder where = new StringBuilder();
where.append(MediaStore.Audio.Media.TITLE + " != ''");
where.append(" AND " + MediaStore.Audio.Media.IS_MUSIC + "=1");
ret = queryHandler.doQuery(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
mCursorCols, where.toString() , null, null);
return ret;
}
class TrackListAdapter extends SimpleCursorAdapter{
TrackQueryHandler mQueryHandler;
TTActivity mActivity = null;
public TrackListAdapter(Context context, int layout, Cursor c, String[] from,
int[] to,TTActivity currentActivity) {
super(context, layout, c, from, to);
mQueryHandler = new TrackQueryHandler(context.getContentResolver());
mActivity = currentActivity;
// TODO Auto-generated constructor stub
}
@Override
public void bindView(View view, Context context, Cursor cursor) {
super.bindView(view, context, cursor);
System.out.println("bindView");
System.out.println("duration:"+cursor.getString(cursor.getColumnIndexOrThrow("duration")));
System.out.println("title:"+cursor.getString(cursor.getColumnIndexOrThrow("title")));
System.out.println("data:"+cursor.getString(cursor.getColumnIndexOrThrow("_data")));
ViewHolder vh = (ViewHolder) view.getTag();
vh.line1.setText(cursor.getString(cursor.getColumnIndexOrThrow("title")));
vh.line2.setText(cursor.getString(cursor.getColumnIndexOrThrow("artist")));
}
@Override
public void changeCursor(Cursor c) {//call this to trigger newView() and bindView()
// TODO Auto-generated method stub
super.changeCursor(c);
System.out.println("changeCursor");
}
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
// TODO Auto-generated method stub
System.out.println("newView");
View v = super.newView(context, cursor, parent);
ViewHolder vh = new ViewHolder();
vh.line1 = (TextView) v.findViewById(R.id.line1);
vh.line2 = (TextView) v.findViewById(R.id.line2);
v.setTag(vh);
return v;
}
class ViewHolder {
TextView line1;
TextView line2;
}
class TrackQueryHandler extends AsyncQueryHandler{
public TrackQueryHandler(ContentResolver cr) {
super(cr);
// TODO Auto-generated constructor stub
}
Cursor doQuery(Uri uri, String[] projection,
String selection, String[] selectionArgs,
String orderBy) {
System.out.println("doQuery");
startQuery(0, null, uri, projection, selection, selectionArgs, orderBy);
return null;
}
@Override
protected void onQueryComplete(int token, Object cookie,
Cursor cursor) {//cursor: The cursor holding the results from the query
// TODO Auto-generated method stub
super.onQueryComplete(token, cookie, cursor);
System.out.println("onQueryComplete");
changeCursor(cursor);//call this, newView() and bindView() will execute
}
}
public TrackQueryHandler getQueryHandler() {
return mQueryHandler;
}
}
public void init(Cursor cursor) {
// TODO Auto-generated method stub
mAdapter.changeCursor(cursor);
}
}