我在C#中編寫我的應用程序(使用monodroid),但我認爲這個問題可以適用於普通的android java到。在gridview中的對號出現在隨機項目
我有一個gridview,如果用戶觸摸一個瓷磚或物品我想勾選出現,如果他們觸摸一個選中的瓷磚,我想勾選消失。我遇到的問題是,如果用戶觸摸一個圖塊,然後向下滾動,則該複選圖案將出現在隨機圖塊上。我知道這與Android回收視圖的事實有關,但我無法弄清楚如何解決它。
這裏是我的GridView getview()
方法
public override View GetView(int position, View convertView, ViewGroup parent)
{
File f = files[position];
ViewHolder holder;
if (convertView == null)
{
LayoutInflater li = (LayoutInflater)context.GetSystemService(Context.LayoutInflaterService);
convertView = li.Inflate(Resource.Layout.gallery_item, parent, false) as LinearLayout;
holder = new ViewHolder();
holder.iv = convertView.FindViewById(Resource.Id.ivGalleryItem) as ImageView;
holder.iv.SetScaleType(ImageView.ScaleType.CenterCrop);
holder.ivCheck = convertView.FindViewById<ImageView>(Resource.Id.ivCheck);
convertView.SetTag(Resource.Layout.gallery_item, holder);
// *這裏就是我說,如果用戶觸摸瓷磚顯示勾選這個瓷磚設置爲true檢查
holder.iv.Click += delegate
{
if (isChecked[position])
{
holder.ivCheck.Visibility = ViewStates.Invisible;
isChecked[position] = false;
}
else
{
holder.ivCheck.Visibility = ViewStates.Visible;
isChecked[position] = true;
}
};
}
else
{
holder = (ViewHolder)convertView.GetTag(Resource.Layout.gallery_item);
}
// **************************here is wherere I say if the tile is true than show the checkmark if it is false dont show it
if (isChecked[position])
{
holder.ivCheck.Visibility = ViewStates.Visible;
}
else
{
holder.ivCheck.Visibility = ViewStates.Invisible;
}
if (f.Exists() && f.IsFile)
{
getPhotoTask.getphoto(holder.iv, f);
}
else
{
holder.iv.SetImageResource(Resource.Drawable.boostitred);
}
return convertView;
}