2016-12-22 21 views
0

各セル内に2つのtextviewがあり、textview要素の1つに対してclickイベントを処理する必要があるリストビューがあります。しかし、私は、アダプタのGetView()内にクリックイベントを置く、それは複数回呼び出されます。Xamarin.Android:複数回呼び出されたリストビューセル内のTextviewでイベントをクリック

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同様のスレッドを経て、しかしどんな解決策を見つけることができませんでした。

+0

'ViewHolder'を使わずにコードをテストしましたが、' view.FindViewById (Resource.Id .; ')を使って2つの' TextView'にアクセスするだけで、クリックイベントは 'TextView'がクリックされたときに1回だけ発生します。 –

+0

Grace Feng:この場合、テキストビューは各リストビューセルの異なるデータを保持するので、無効なテキスト文字列をテキストビューに戻しています。 –

+0

本当に?BaseAdapter を継承したアダプタをカスタマイズしました。 –

答えて

0

metod getviewが呼び出されたときにevertimeが表示され、+=のクリックイベントが追加されるため、イベントが複数回呼び出されます。

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は、このためのリストビューよりも優れている:あなたがそのように、もし内部のクリックイベントを置くことができる。この場合

+0

その場合、アイテムセルをタップすると、返されたアイテムは無効になります。それは、トップアイテムをピックアップする。 –

+0

ああ、そうだ。あなたはRecyclerViewを知っていますか?それを実装する最善の方法です。 – Lnacer

関連する問題