Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/202.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xamarin Android,列表适配器在getView中返回正确位置,但在getView图像单击事件中返回错误位置_Android_Android Listview_Xamarin - Fatal编程技术网

Xamarin Android,列表适配器在getView中返回正确位置,但在getView图像单击事件中返回错误位置

Xamarin Android,列表适配器在getView中返回正确位置,但在getView图像单击事件中返回错误位置,android,android-listview,xamarin,Android,Android Listview,Xamarin,我有一个listview,它的高度和宽度都是匹配的父级,使用适配器填充,并且我在getview中得到的位置是正确的,但是viewholder.image.click事件始终根据可见区域给出位置。例如,如果我将listview高度更改为某个静态dp,那么可见区域将增加到4个元素0,1,2,3,之后它再次显示0,1,2,3,应该是5,6 每次创建convertView都会解决这个问题,这实际上是一种错误的方法 public override View GetView(int position, Vi

我有一个listview,它的高度和宽度都是匹配的父级,使用适配器填充,并且我在getview中得到的位置是正确的,但是viewholder.image.click事件始终根据可见区域给出位置。例如,如果我将listview高度更改为某个静态dp,那么可见区域将增加到4个元素0,1,2,3,之后它再次显示0,1,2,3,应该是5,6

每次创建convertView都会解决这个问题,这实际上是一种错误的方法

public override View GetView(int position, View convertView, ViewGroup parent)
    {
        MyDealViewHolder viewHolder = null;
        View rowView = convertView;
        Toast.MakeText (baseActivity, string.Format (position.ToString ()), ToastLength.Short).Show ();
        if (rowView == null)
        {
            rowView = baseActivity.LayoutInflater.Inflate(Resource.Layout.DealListItem, parent, false);
            viewHolder = new MyDealViewHolder();
            viewHolder.LikeImage= rowView.FindViewById<ImageView>(Resource.Id.imgDealImage);
            viewHolder.LikeImage.Click += delegate(object sender, EventArgs e) {
                Toast.MakeText (baseActivity, string.Format (position.ToString ()), ToastLength.Short).Show ();
                viewHolder.LikeImage.SetImageResource (Resource.Drawable.heart_red_icon);
            };
            rowView.Tag = viewHolder;
        }
        else
        {
            viewHolder= (MyDealViewHolder)rowView.Tag;
        }
        return rowView;
    }
在这里,两人都给出了不同的立场。第一个正确,第二个符合listview的可见区域


谢谢

您无法访问listview上用户看不到的项目,为什么要这样做?@CDrosos-有一个类似/不同的图像视图。单击“不同图像”时,它将更改为“相似图像”。单击第一个元素的“不一样”图像时,我会为“一样”设置一个新图像,但第三个元素在该时间不可见,图像也会显示出来changed@CDrosos-单击可见区域中的第0个元素时,其图像会发生更改,但向上滚动时,第3个元素的图像也会发生更改。由于第一个元素和第三个元素的位置为0,这是不可见的,用于在视图上动态添加行并仅控制可见行,我在这里也做了类似的事情:@CDrosos您所说的不允许访问用户看不见的listview上的项目,这可能是我自己问题解决方案的一大步,这个问题与此问题有点类似,请您访问查看好吗?谢谢你,伙计!