嗨,我有这种问题,当滚动图像视图改变他们的位置和 他们的背景图片。我在这个网站上看到了关于这个主题的其他答案,但没有 帮助了我。
像这样一次: 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;
}
答案 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;
}