Xamarin Android - 带复选框的自定义警报对话框,抛出异常
Xamarin Android - custom alert dialog with checkboxes, exception thrown
我有一个弹出的警告对话框,通过复选框为用户提供多个选择,以及供用户输入一些文本的编辑文本。自定义警报对话框从布局中膨胀,到目前为止一切正常。
我的问题是试图处理复选框的点击事件。我不断收到空引用异常,而且我无法弄清楚我哪里出错了。我尝试过以各种方式编写代码,但我想我现在对这个问题视而不见。
我需要查看复选框是否被选中并将结果分配给我的布尔值。
在我尝试处理我的点击事件时抛出异常。感谢任何帮助,谢谢。
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");
}
您调用 FindViewById()
的方式导致它在您的 Activity 布局中搜索 CheckBox 对象,但它们存在于对话框中,不会被搜索。如果您在该部分设置断点,您会发现您的 CheckBox 对象都是 null
,因此在尝试附加事件处理程序时出现异常。
改为在对话框的展开视图上调用 FindViewById()
:
CheckBox checkCallMe = myCustomAlert.FindViewById<CheckBox> (Resource.Id.checkBoxCallMe);
我有一个弹出的警告对话框,通过复选框为用户提供多个选择,以及供用户输入一些文本的编辑文本。自定义警报对话框从布局中膨胀,到目前为止一切正常。
我的问题是试图处理复选框的点击事件。我不断收到空引用异常,而且我无法弄清楚我哪里出错了。我尝试过以各种方式编写代码,但我想我现在对这个问题视而不见。
我需要查看复选框是否被选中并将结果分配给我的布尔值。
在我尝试处理我的点击事件时抛出异常。感谢任何帮助,谢谢。
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");
}
您调用 FindViewById()
的方式导致它在您的 Activity 布局中搜索 CheckBox 对象,但它们存在于对话框中,不会被搜索。如果您在该部分设置断点,您会发现您的 CheckBox 对象都是 null
,因此在尝试附加事件处理程序时出现异常。
改为在对话框的展开视图上调用 FindViewById()
:
CheckBox checkCallMe = myCustomAlert.FindViewById<CheckBox> (Resource.Id.checkBoxCallMe);