在多次调用的Getview中单击“方法" [英] Click Method inside Getview Called multiple times

查看:117
本文介绍了在多次调用的Getview中单击“方法"的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我只希望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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆