我在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;
}