2016-07-08 41 views
1

我想點擊方法只被調用一次,我能做些什麼得到這個結果? 這裏是我的代碼:點擊Getview裏面的方法多次調用

 public override View GetView(int position, View convertView, ViewGroup parent) 
    { 
     View result = convertView; 
     if (result == null) 
     { 
      result = LayoutInflater.From(_Context).Inflate(Resource.Layout.DiagnoseTemplateLayout, null, false); 
     } 
     TextView textView = result.FindViewById<TextView>(Resource.Id.DiagnoseTemplateTextView); 
     textView.Text = _Diagnoses[position].Description; 
     Button button = result.FindViewById<Button>(Resource.Id.DeleteDiagnoseTemplateButton); 
     button.Tag = _Diagnoses[position].Key; 
     button.Click += delegate 
     { 
      if (_Diagnoses[position] != null) 
      { 
       AlertDialog.Builder builder = new AlertDialog.Builder(_Context); 
       builder.SetTitle("Varning"); 
       builder.SetMessage("Delating selected item?"); 
       builder.SetPositiveButton("YES", delegate 
       { 
        SuperBillAddActivity.SuperBill.Diagnoses.Remove(_Diagnoses[position]); 
        SuperBillAddActivity.RefreshLists(); 
       }); 
       builder.SetNegativeButton("NO", delegate { }); 
       builder.Show(); 
      } 
     }; 
     return result; 
    } 

這種方法被稱爲3倍button.Click + =代表 從位置開始從那裏是按鈕我們點擊

 public override View GetView(int position, View convertView, ViewGroup parent) 
    { 
     View result = convertView; 
     if (result == null) 
     { 
      result = LayoutInflater.From(_Context).Inflate(Resource.Layout.DiagnoseTemplateLayout, null, false); 
     } 
     TextView textView = result.FindViewById<TextView>(Resource.Id.DiagnoseTemplateTextView); 
     textView.Text = _Diagnoses[position].Description; 
     Button button = result.FindViewById<Button>(Resource.Id.DeleteDiagnoseTemplateButton); 
     button.Tag = _Diagnoses[position].Key; 
     button.Click += delegate 
     { 
      if ((_Clicked) && (_Diagnoses[position] != null)) 
      { 
       _Clicked = !_Clicked; 
       AlertDialog.Builder builder = new AlertDialog.Builder(_Context); 
       builder.SetTitle("Varning"); 
       builder.SetMessage("Delating selected item?"); 
       builder.SetPositiveButton("YES", delegate 
       { 
        _Clicked = !_Clicked; 
        SuperBillAddActivity.SuperBill.Diagnoses.Remove(_Diagnoses[position]); 
        SuperBillAddActivity.RefreshLists(); 
       }); 
       builder.SetNegativeButton("NO", delegate 
       { 
        _Clicked = !_Clicked; 
       }); 
       builder.Show(); 
      } 
     }; 
     return result; 
    } 

_Clicked < - 我實現了這一點,現在問題已解決,但我不喜歡這種放置代碼的方式。有沒有其他辦法呢? 另外,我感興趣的是爲什麼第一個代碼以它的方式工作。

+0

我在下面幫我的回答可以請你把它標記爲正確的嗎?我很感激。 – jzeferino

回答

2

GetView被稱爲多次,因此你也做了button.Click += delegate多倍。這就是你在Click中撥打太多電話的原因。

嘗試:

Button button; 
if (result == null) 
{ 
    result = LayoutInflater.From(_Context).Inflate(Resource.Layout.DiagnoseTemplateLayout, null, false); 
    button = result.FindViewById<Button>(Resource.Id.DeleteDiagnoseTemplateButton); 
    button.Click += delegate {...} 

} 
TextView textView = result.FindViewById<TextView>(Resource.Id.DiagnoseTemplateTextView); 
textView.Text = _Diagnoses[position].Description; 
button.Tag = _Diagnoses[position].Key;