Xamarin Android - 带有复选框的自定义警报对话框,抛出异常

时间:2015-02-04 16:45:56

标签: android checkbox xamarin alertdialog nullreferenceexception

我有一个警告对话框,弹出并通过复选框为用户提供多种选择,以及用户输入一些文本的编辑文本。自定义警报对话框从布局中膨胀,到目前为止一切都很好。

我的问题是尝试处理复选框的点击事件。我一直得到空引用异常,我无法解决我出错的地方。我曾尝试用各种时尚编写代码,我想我现在只是对这个问题视而不见了。

我需要查看是否选中了复选框并将结果分配给我的bools。

在尝试处理点击事件时,会抛出异常。任何帮助表示感谢,谢谢。

var myCustomAlert = LayoutInflater.Inflate(Resource.Layout.delegateCaptureAlertLayout, null);

bool wantphoneCall = true;
bool wantBrochure = false;
bool wantMailingList = false;
string additionalText; 

AlertDialog.Builder builder;
builder = new AlertDialog.Builder(this);
builder.SetTitle("Your request");
builder.SetView(myCustomAlert);
builder.SetMessage("Some message");
builder.SetPositiveButton("OK", delegate { // do something 
    });
builder.Show ();


CheckBox checkCallMe = FindViewById<CheckBox> (Resource.Id.checkBoxCallMe);
CheckBox checkBrochure = FindViewById<CheckBox> (Resource.Id.checkBoxBrochure);
CheckBox checkMailingList = FindViewById<CheckBox> (Resource.Id.checkBoxMailing);
EditText additionalInfoText = FindViewById<EditText> (Resource.Id.textAdditionalInfo);

  checkCallMe.Click += (sender, e) => {             // exception thrown here
            Console.WriteLine("Checkbox is clicked");

            if (checkCallMe.Checked)
            {
                wantphoneCall = true;
                Console.WriteLine("Checkbox is checked");
            }
            else
            {
                wantphoneCall = false;
                Console.WriteLine("Checkbox is not checked");
            }

1 个答案:

答案 0 :(得分:1)

您调用FindViewById()的方式是使其在Activity的布局中搜索CheckBox对象,但它们存在于未搜索的对话框中。如果在该部分中设置断点,则会发现CheckBox对象都是null,因此在尝试附加事件处理程序时会出现异常。

在对话框的虚增视图上调用FindViewById()

CheckBox checkCallMe = myCustomAlert.FindViewById<CheckBox> (Resource.Id.checkBoxCallMe);