Skip to main content
improved formatting
Source Link
palacsint
  • 29.9k
  • 9
  • 81
  • 156

Here is my custom CursorAdapter's code CursorAdapter's code:

As you can see, I use already the trick of the View HolderViewHolder to avoid calling findViewById too often.

But the problem is that my list is still very slow. What can I do to optimize it even more  ? For instance I could load in priority the Albums' title and Artists' names and display them and then, load in a second time the cover (asynchrouslyasynchronously).

Do you have any idea how to make this list less laggy  ? Any advice is welcome.

Thanks

Here is my custom CursorAdapter's code :

As you can see, I use already the trick of the View Holder to avoid calling findViewById too often.

But the problem is that my list is still very slow. What can I do to optimize it even more  ? For instance I could load in priority the Albums' title and Artists' names and display them and then, load in a second time the cover (asynchrously).

Do you have any idea how to make this list less laggy  ? Any advice is welcome.

Thanks

Here is my custom CursorAdapter's code:

As you can see, I use already the trick of the ViewHolder to avoid calling findViewById too often.

But the problem is that my list is still very slow. What can I do to optimize it even more? For instance I could load in priority the Albums' title and Artists' names and display them and then, load in a second time the cover (asynchronously).

Do you have any idea how to make this list less laggy? Any advice is welcome.

added 181 characters in body; edited tags
Source Link
Jecimi
  • 131
  • 1
  • 3

As you can see, I use already athe trick of the View Holder to avoid calling findViewById too often.

I've also tried to scale down the resolution of the Cover's Bitmap before displaying them in the ImageViews, but I saw no improvement :/

Do you have any idea how to make this list less laggy ? Thanks Any advice is welcome.

Thanks

As you can see, I use already a View Holder to avoid calling findViewById too often.

Do you have any idea how to make this list less laggy ? Thanks

As you can see, I use already the trick of the View Holder to avoid calling findViewById too often.

I've also tried to scale down the resolution of the Cover's Bitmap before displaying them in the ImageViews, but I saw no improvement :/

Do you have any idea how to make this list less laggy ? Any advice is welcome.

Thanks

Source Link
Jecimi
  • 131
  • 1
  • 3

Efficient Album Cover loading for ListView

I have a list view which display in each view a Album's name, the associated Artist and the album art.

Here is the code of my ListFragment which display this list :

public class AlbumsFragment extends ListFragment implements LoaderManager.LoaderCallbacks<Cursor> {

AlbumsAdapter mAdapter;

        @Override
           public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
           View myFragmentView = inflater.inflate(R.layout.albums_fragment_layout, container, false);
           return myFragmentView;
         }


        @Override
          public void onActivityCreated(Bundle savedInstanceState) {
           super.onActivityCreated(savedInstanceState);

                    mAdapter = new AlbumsAdapter(getActivity(), null);
                    setListAdapter(mAdapter);
                    getLoaderManager().initLoader(0, null, this);                               
        }


static final String[] ALBUM_SUMMARY_PROJECTION = { MediaStore.Audio.Albums._ID, MediaStore.Audio.Albums.ALBUM, MediaStore.Audio.Albums.ARTIST, MediaStore.Audio.Albums.ALBUM_ART,};  



        public Loader<Cursor> onCreateLoader(int id, Bundle args) {      
            String select = null;  
            return new CursorLoader(getActivity(), MediaStore.Audio.Albums.EXTERNAL_CONTENT_URI,ALBUM_SUMMARY_PROJECTION, select, null, null);  
        }  



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



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

Here is my custom CursorAdapter's code :

public class AlbumsAdapter extends CursorAdapter {
    
    
    private final LayoutInflater mInflater;
    
     public AlbumsAdapter(Context context, Cursor c) {
        super(context, c);
        mInflater=LayoutInflater.from(context);
     
    }
    @Override
    public void bindView(View view, Context context, Cursor cursor) {
        
        ViewHolder holder = (ViewHolder) view.getTag();
        if (holder == null) {
            holder = new ViewHolder();
            holder.albumTitle = (TextView) view.findViewById(R.id.albumTextView);
            holder.artistName = (TextView) view.findViewById(R.id.artistTextView);
            holder.coverAlbum = (ImageView)view.findViewById(R.id.album_cover);
            holder.column1 = cursor.getColumnIndexOrThrow(MediaStore.Audio.Albums.ALBUM);
            holder.column2 = cursor.getColumnIndexOrThrow(MediaStore.Audio.Albums.ARTIST);
            holder.column3 = cursor.getColumnIndexOrThrow(MediaStore.Audio.Albums.ALBUM_ART);
            view.setTag(holder);
        }
        holder.albumTitle.setText(cursor.getString(holder.column1));
        holder.artistName.setText(cursor.getString(holder.column2));
        Bitmap coverBitmap = BitmapFactory.decodeFile(cursor.getString(holder.column3));
        holder.coverAlbum.setImageBitmap(coverBitmap);
    }
    
    static class ViewHolder {
        TextView albumTitle;
        TextView artistName;
        ImageView coverAlbum;
        int column1; 
        int column2;
        int column3;
    }
    
    @Override
    public View newView(Context context, Cursor cursor, ViewGroup parent) {
        final View view=mInflater.inflate(R.layout.albums_row,parent,false); 
        return view;
    }

    
}
    

As you can see, I use already a View Holder to avoid calling findViewById too often.

But the problem is that my list is still very slow. What can I do to optimize it even more ? For instance I could load in priority the Albums' title and Artists' names and display them and then, load in a second time the cover (asynchrously).

Do you have any idea how to make this list less laggy ? Thanks