Search code examples
androidandroid-gridviewandroid-scrollandroid-gridlayout

Gridview scrolling not working (It's too slow)


I have a grid view its showing some images from SD card it showing properly but only when I am scrolling it loading images again and again that is why scrolling is too slow I don't know why it loading images every time when I am scrolling (images that are not showing inside the screen.)

My code

        // create a new ImageView for each item referenced by the Adapter
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder;
        if (c.moveToFirst())
        {
            do 
            {          
                if (convertView == null) 
                {             
                    convertView = mInflater.inflate(R.layout.grid_row_view, null);
                    holder = new ViewHolder();
                    holder.ImgThumb  = (ImageView) convertView.findViewById(R.id.imgThumb);
                    holder.Viewcover = (ImageView) convertView.findViewById(R.id.cover);
                    holder.PdfUrl    = (TextView) convertView.findViewById(R.id.hiddenPdfUrl);
                    convertView.setTag(holder);
                } 
                else 
                {
                    holder = (ViewHolder) convertView.getTag();
                }

                String imagePath = Environment.getExternalStorageDirectory().toString() + "/ICA Faculty/";

                holder.ImgThumb.setImageDrawable(Drawable.createFromPath(imagePath + imgUrl.get(position)));
                holder.Viewcover.setImageResource(R.drawable.book_cover);
                holder.PdfUrl.setText(pdfUrl.get(position));

            }  while (c.moveToNext());
        }

        return convertView;        
    } 

    private class ViewHolder {
        ImageView ImgThumb;
        ImageView Viewcover;
        TextView PdfUrl;
    }

Solution

  • public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder;
        //final boolean result = ( position == 0 ) ? c.moveToFirst() : c.moveToNext();
    
    
        if (c.moveToPosition(position))
        {
            if (convertView == null) 
            {             
                convertView = mInflater.inflate(R.layout.grid_row_view, null);
                holder = new ViewHolder();
                holder.ImgThumb  = (ImageView) convertView.findViewById(R.id.imgThumb);
                holder.Viewcover = (ImageView) convertView.findViewById(R.id.cover);
                holder.PdfUrl    = (TextView) convertView.findViewById(R.id.hiddenPdfUrl);
                convertView.setTag(holder);
            } 
            else 
            {
                holder = (ViewHolder) convertView.getTag();
            }
    
            String imagePath = Environment.getExternalStorageDirectory().toString() + "/ICA Faculty/";
    
            holder.ImgThumb.setImageDrawable(Drawable.createFromPath(imagePath + imgUrl.get(position)));
            holder.Viewcover.setImageResource(R.drawable.book_cover);
            holder.PdfUrl.setText(pdfUrl.get(position));
    
        }
        return convertView;
    }
    

    Also Inside getCount method of your adapter return c.getCount();