【问题标题】:Gridview scrolling not working (It's too slow)Gridview 滚动不起作用(太慢了)
【发布时间】:2013-04-16 09:29:59
【问题描述】:

我有一个网格视图,它显示了一些来自 SD 卡的图像,它显示正确,但只有当我滚动它时才一次又一次地加载图像,这就是滚动太慢的原因我不知道为什么每次我都加载图像正在滚动(未在屏幕内显示的图像。)

我的代码

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

【问题讨论】:

  • if (c.moveToFirst())
  • “当我滚动它时一次又一次地加载图像”这是 gridView 和 ListView 的一般行为......它为每个 raw 调用 getView 方法。而且您每次都在重新加载您的 getView 方法...

标签: android android-gridview android-scroll android-gridlayout


【解决方案1】:
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;
}

同样在适配器的 getCount 方法中返回 c.getCount();

【讨论】:

  • 错误Multiple markers at this line - This method must return a result of type View 在第一行 public View getView(int position, View convertView, ViewGroup parent)
  • 另一件事@Rajesh 当我加载这个活动屏幕时,大约 10 - 12 秒会变白,这取决于图像为什么你能告诉我
  • 是的,当此活动加载时,它会显示 10 到 12 秒的白屏
  • 可能是 GridView 背景 尝试将其更改为其他颜色。
  • 对不起,不要尝试将所有任务分配给我。我在这里给你一些提示。尝试自己学习这些东西,这将对您将来有所帮助,并且堆栈溢出不会为您打开最后一扇门。
【解决方案2】:

这是因为您要为每张图片加载所有图片...如果您使用光标,请考虑使用 SimpleCursorAdapter。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-02
    • 2017-12-26
    • 1970-01-01
    • 2014-08-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多