【问题标题】:Click Method inside Getview Called multiple times点击Getview内的方法多次调用
【发布时间】:2016-07-08 10:00:16
【问题描述】:

我希望 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;
    }

这个方法被调用了 3 次 button.Click += delegate 从我们点击按钮的位置开始

        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

【问题讨论】:

  • 我下面的回答对您有帮助,您可以将其标记为正确吗?我很感激。

标签: android methods xamarin getview


【解决方案1】:

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;

【讨论】:

    猜你喜欢
    • 2012-11-13
    • 1970-01-01
    • 2015-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-27
    相关资源
    最近更新 更多