我有简单的GridView图像。 GridView中的每个项目都有ImageView,用于显示图片,另一个ImageView在图像被收藏时变为可见(白色星形)。
当我快速滚动到GridView的底部时,例如,在位置3上被收藏和选择的图像不再被选中和被收藏,而是在底部的一些其他项目被随机选择并被收藏。然后当我滚动到顶部时,一些其他项目变得被收藏并随机选择。
但是我注意到这个问题大多只有第二和第三项。
这是最初选择和收藏的项目:
当滚动到底部时,此项目会随机选择并在底部收藏:
我的适配器:
public class ImageAdapter extends BaseAdapter {
@Override
public int getCount() {
return imageUrls.length;
}
@Override
public long getItemId(int position) {
return 0;
}
public class ViewHolder {
ImageView imageView;
ProgressBar progressBar;
ImageView imgFavorite;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
final ViewHolder holder;
if (convertView == null) {
convertView = getLayoutInflater().inflate(R.layout.item_grid_image,
parent, false);
holder = new ViewHolder();
holder.imageView = (ImageView) convertView.findViewById(R.id.image);
holder.progressBar = (ProgressBar) convertView
.findViewById(R.id.Itemprogress);
holder.imgFavorite = (ImageView) convertView
.findViewById(R.id.selectorText);
convertView.setTag(holder);
inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
RelativeLayout relative = (RelativeLayout) convertView.findViewById(R.id.profileImageContainer);
relative.getLayoutParams().height = width;
} else {
holder = (ViewHolder) convertView.getTag();
}
imageLoader.displayImage(imageUrls[position], holder.imageView,
options, new SimpleImageLoadingListener() {
@Override
public void onLoadingStarted(String imageUri, View view) {
holder.progressBar.setProgress(0);
holder.progressBar.setVisibility(View.VISIBLE);
}
@Override
public void onLoadingComplete(String imageUri,
View view, Bitmap loadedImage) {
holder.progressBar.setVisibility(View.GONE);
}
}, null);
if (profilePicList[position].isprofilepic && firstTime
) {
currentPosition = position;
DefaultImg = convertView;
holder.imgFavorite.setVisibility(View.VISIBLE);
firstTime = false;
}
return convertView;
}
@Override
public Object getItem(int position) {
return null;
}
}
编辑:添加clicklistener代码,我在其中更改所选图像的背景
AdapterView.OnItemClickListener onItemClickListener = new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
if(mActionMode == null) {
mActionMode = startActionMode(mActionModeCallback);
}
if (previousView != null) {
((ViewGroup) previousView).getChildAt(0).setAlpha(1.0f);
((ViewGroup) previousView).setBackgroundResource(0);
}
((ViewGroup) view).setBackgroundResource(R.drawable.back);
((ViewGroup) view).getChildAt(0).setAlpha(0.3f);
previousView = view;
}
};
答案 0 :(得分:1)
将其他部分放在一边,这可能会解决您的问题。滚动时,Gridview会重复使用每个图像视图。
if (profilePicList[position].isprofilepic && firstTime
) {
currentPosition = position;
DefaultImg = convertView;
holder.imgFavorite.setVisibility(View.VISIBLE); // or INVISIBLE
firstTime = false;
}else{
holder.imgFavorite.setVisibility(View.GONE);
}
答案 1 :(得分:1)
构建适配器以重用视图,当滚动视图使其不再可见时,它可用于出现的新视图之一。这个重用的View是convertView。
在if条件之后添加此块(当你将imgFavorite传递给VISIBLE时)
else
{
holder.imgFavorite.setVisibility(View.GONE);
firstTime = true;
}