Xamarin.Android:在列表视图单元格内的Textview上单击事件多次调用

时间:2016-12-22 06:46:03

标签: xamarin xamarin.android

我有一个列表视图,其中每个单元格内部有两个textview,我需要处理其中一个textview元素的click事件。但是当我将click事件放在适配器的GetView()中时,会多次调用它。

public override View GetView(int position, View convertView, ViewGroup parent)
    {
        var item = tableItems[position];
        ViewHolder holder;
        View view = convertView;

            if (view == null)
            {
                LayoutInflater layoutInflator = LayoutInflater.From(mContext);
                view = layoutInflator.Inflate(Resource.Layout.myListViewCell, null);
                holder = new ViewHolder();
                holder.tvEmpName = view.FindViewById<TextView>(Resource.Id.tv_EmpName);
                holder.tvEmpPhone = view.FindViewById<TextView>(Resource.Id.tv_EmpPhone);
                view.Tag = holder;
            }

            else
            {
                holder = (ViewHolder)view.Tag;
            }

            holder.tvEmpName.Text = item.FullName;
            holder.tvEmpPhone.Text = item.Phone;

            holder.tvEmpPhone.Click += (sender, e) => {
               // Click event to launch the Popup menu
               // This event is being called multiple times, as Get view() being called multiple times.
            };

            return view;
   }

我经历了this类似的帖子,但没有找到任何解决方案。

1 个答案:

答案 0 :(得分:0)

该事件被多次调用,因为当调用metod getview时,您会使用+=添加点击事件。

在这种情况下,您可以将click事件放在if中,如下所示:

if (view == null)
{
      LayoutInflater layoutInflator = LayoutInflater.From(mContext);
      view = layoutInflator.Inflate(Resource.Layout.myListViewCell, null);
      holder = new ViewHolder();
      holder.tvEmpName = view.FindViewById<TextView>(Resource.Id.tv_EmpName);
      holder.tvEmpPhone = view.FindViewById<TextView>(Resource.Id.tv_EmpPhone);
      view.Tag = holder;
      holder.tvEmpPhone.Click += (sender, e) => {
           // Code here
      };
}

但是 recyclerview 比listview要好。