现在的位置: 首页 > 综合 > 正文

2011-06-14 11:28 SimpleCursorAdapter中的newView(),bindVew(),changeCursor()&&显示SD卡中的音乐文件

2013年09月17日 ⁄ 综合 ⁄ 共 4300字 ⁄ 字号 评论关闭

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);
    }
}

抱歉!评论已关闭.