gridview中的图像在滚动时改变其位置

时间:2013-08-13 02:52:03

标签: java android gridview scroll

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

像这样一次: grid view scrolling issue GridView scrolling problem on Android GridView elements changes their place dynamically when scroll screen

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

重要的是我没有为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;
}

2 个答案:

答案 0 :(得分: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;
    }

答案 1 :(得分: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;
}