Kob*_*bra 2 methods android xamarin getview
我希望 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 (_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;
}
Run Code Online (Sandbox Code Playgroud)
这个方法被调用 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;
}
Run Code Online (Sandbox Code Playgroud)
_Clicked <- 我实现了这个,现在问题解决了,但我不喜欢这种放置代码的方式。有没有替代方案?另外,我对为什么第一个代码按它的方式工作很感兴趣。
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;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
711 次 |
| 最近记录: |