0

嗨,我遇到了这种问题,当滚动图像视图改变它们的位置和背景图像时。我在这个网站上看到了关于这个主题的其他答案,但没有一个对我有帮助。

像这样一次: grid view scrolling issue GridView scrolling problem on Android GridView elements 在滚动屏幕时动态改变它们的位置

和许多其他人......但他们没有解决我的问题。

重要的是我不使用 gridview 或 gridview 项目(imageViews)的自定义布局。我以编程方式创建它们。这对我来说非常重要,所以如果有人知道答案,请帮助我......谢谢。

public View getView(int position, View convertView, ViewGroup parent) {
    if(convertView==null){
        imageView = new ImageView(ctx);
    } else {
        imageView = (ImageView) convertView;
    }
        imageView.setLayoutParams(new GridView.LayoutParams(85, 85));
        imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
        imageView.setPadding(8, 8, 8, 8);
        imageView.setBackgroundResource(tmp[position]);
        imageView.setImageResource(blank);

    return imageView;
}
4

2 回答 2

1

它是一个简单的方法。适配器在滚动时回收每个视图。所以我们只需要创建在第一次之后被重新使用的那些。持有者有助于避免像 findViewById 这样昂贵的调用,并通过获取旧的项目并更改其属性来重用这些项目。

您需要记住的一点是,我们需要保存要显示在任何一个容器(如 array[] 或 List )中的图像,并在每次返回视图之前重置,否则它将显示以前的最后一个回收视图。

public View getView(int position, View convertView, ViewGroup parent) {
            // TODO Auto-generated method stub

            LayoutInflater inflater = (LayoutInflater) activity
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

            if (convertView == null) {
                convertView = inflater.inflate(R.layout.item_layout, null);
                holder = new ViewHolder();
                holder.cover = (ImageView) convertView
                        .findViewById(R.id.item_cover);
                convertView.setTag(holder);

            } else {
                holder = (ViewHolder) convertView.getTag();

            }

        holder.cover.setBackgroundResource(tmp[position]);

        return convertView ;
    }

    static class ViewHolder {
        ImageView cover;
    }
于 2014-02-24T11:20:29.623 回答
0

尝试这个

 class Holder {
     ImageView imageView;
 }

 public View getView(int position, View convertView, ViewGroup parent) {
 Holder holder;
if(holder.imageView==null){
    holder=new Holder();
    holder.imageView = new ImageView(ctx);
    holder.imageView.setLayoutParams(new GridView.LayoutParams(85, 85));
    holder.imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
    holder.imageView.setPadding(8, 8, 8, 8);
    imageView.setTag(holder);
 } else {
    holder= (Holder) imageView.getTag();
 }

     holder.imageView.setBackgroundResource(tmp[position]);
     holder.imageView.setImageResource(blank);

 return imageView;
}
于 2013-08-13T04:23:24.240 回答