У меня есть простой 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;
}
}
EDIT: добавлено в код прослушивателя кликов, где я меняю фон выбранного изображения
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;
}
};