2016-07-08 9 views
1

Я хочу, чтобы метод click вызывался только один раз, что я могу получить, чтобы получить этот результат? вот мой код:Нажмите Метод внутри 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.

Try:

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; 
Смежные вопросы