在多次调用的Getview中单击“方法" [英] Click Method inside Getview Called multiple times
问题描述
我只希望click方法被调用一次,我怎么能得到这个结果? 这是我的代码:
I want click method to be called only once, what can I do get this result? here's my code:
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次按钮.单击+ =委托 从我们点击的按钮位置开始
This method is called 3 times button.Click += delegate starting from position from where is button we clicked
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<-我实现了这一点,现在问题已解决,但我不喜欢这种放置代码的方式.除此之外,还有其他选择吗? 另外,我很感兴趣为什么第一个代码会像以前那样工作.
_Clicked <- I implemented this and now the problem is solved but I don't like this way of putting a code. is there an alternative to this? also, i'm interested why first code worked the way it did.
推荐答案
GetView
被多次调用,因此您也多次执行button.Click += delegate
.这就是为什么您在Click
中收到太多呼叫的原因.
GetView
is called multiple times, in consequence your doing button.Click += delegate
multiples times too. And this is the reason why your getting too much calls in 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;
这篇关于在多次调用的Getview中单击“方法"的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!