1

好的,所以我有一个相当烦人的问题。我只是尝试使用 和 列出设备上的所有CursorLoader歌曲LoaderCallbacks。我的问题只是没有显示任何内容。我使用与在设备上加载所有专辑、艺术家和播放列表完全相同的方法。使用一些调试我发现问题是newView()CursorAdapter

这是我的CursorAdapter

private class SongItemAdapter extends CursorAdapter
{               
    public SongItemAdapter(Context context) 
    {
        super(context, null, false); 
    }

    @Override
    public void bindView(View view, Context context, Cursor cursor) 
    {
        final int albumId = cursor.getInt(cursor
                 .getColumnIndex(MediaStore.Audio.Media.ALBUM_ID));
        final String songName = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.TITLE));          
        final String artistName = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.ARTIST));           
        final String duration = 
                Utilities.milliSecondsToTimer(
                        cursor.getLong(cursor.getColumnIndex(MediaStore.Audio.Media.DURATION)));

         final ImageView albumCover = (ImageView) view.findViewById(R.id.all_songs_album_cover);
         final TextView songNameTextView = (TextView) view.findViewById(R.id.all_songs_song_name);
         final TextView artistNameTextView = (TextView) view.findViewById(R.id.all_songs_artist_name);
         final TextView durationTextView = (TextView) view.findViewById(R.id.all_songs_song_duration);                                       

         ImageLoader.getInstance().displayImage(
                 ContentUris.withAppendedId(
                         sArtworkUri, albumId).toString(), albumCover);
         songNameTextView.setText(songName);
         artistNameTextView.setText(artistName);
         durationTextView.setText(duration);
    }

    @Override
    public View newView(Context context, Cursor cursor, ViewGroup parent) 
    {           
        return LayoutInflater.from(context).inflate(R.layout.song_list_item, parent, false);
    }
}

这是我的LoaderCallbacks

private final LoaderCallbacks<Cursor> mCursorCallbacks = new LoaderCallbacks<Cursor>() 
{
    @Override
    public Loader<Cursor> onCreateLoader(int id, Bundle args) 
    {      
        return new CursorLoader(getActivity(),
                MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, Song.FILLED_PROJECTION, MediaStore.Audio.Media.IS_MUSIC + "!=0", null,
                MediaStore.Audio.Media.TITLE + " ASC");
    }

    @Override
    public void onLoadFinished(Loader<Cursor> loader, Cursor data) 
    {           
        mAdapter.swapCursor(data);            
    }

    @Override
    public void onLoaderReset(Loader<Cursor> loader) 
    {
        mAdapter.swapCursor(null);
    }         
};

这是我的适配器和列表视图的初始化等等:

    mAdapter = new SongItemAdapter(this.getActivity());     

    mListView = (ListView) rootView.findViewById(R.id.all_songs_list);

    mListView.setOnItemClickListener(this);
    mListView.setOnScrollListener(new PauseOnScrollListener(ImageLoader.getInstance(), false, false));
    mListView.setAdapter(mAdapter);         
    mListView.setFastScrollEnabled(true);
    mListView.setFastScrollAlwaysVisible(true);
    mListView.setRecyclerListener(new RecyclerListener()
    {
        @Override
        public void onMovedToScrapHeap(View view) 
        {
            // Release strong reference when a view is recycled
            final ImageView imageView = (ImageView) view.findViewById(R.id.all_songs_album_cover);
            imageView.setImageBitmap(null);
        }
    });

    getLoaderManager().initLoader(LOADER_CURSOR, null, mCursorCallbacks);       

正如我之前所说,这正是我用来加载专辑、艺术家和播放列表的方法,而且这些都运行良好。

4

0 回答 0