2014-12-22 3 views
0

В настоящее время я получаю исключение нулевой ссылки в Xamarin.Android при вызове sendChildInfoToMainForm() ниже. У меня нет проблем с управлением свойствами какого-либо объекта до его передачи, а когда исключение выбрано, инспектор не показывает ни один объект как нуль. Любые идеи, что может произойти здесь? Я озадачен, хотя чувствую, что это должно быть что-то простое.Исключительное исключение ссылки при передаче EditText в качестве параметра

public override Android.Views.View OnCreateView (LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
    { 
     var view = inflater.Inflate(Resource.Layout.popupAddChild, container, true); 

     Dialog.SetTitle ("New Child"); 

     EditText childFirstName_editText = view.FindViewById<EditText> (Resource.Id.editTextChildFirstName); 
     DatePicker childDOB_datePicker = view.FindViewById<DatePicker> (Resource.Id.datePickerChidDOB); 
     Button submitChild = view.FindViewById<Button> (Resource.Id.buttonAddChild); 

     childDOB_datePicker.SpinnersShown = true; 

     //set up min and max dates 
     DateTime origin = new DateTime(1970, 1, 1, 0, 0, 0, 0); 
     TimeSpan diff = System.DateTime.UtcNow.AddYears(-26) - origin; 
     childDOB_datePicker.MinDate = (long) Math.Floor(diff.TotalSeconds); 

     //wire up the button 
     submitChild.Click += delegate { sendChildInfoToMainForm(childFirstName_editText, childDOB_datePicker); }; 

     return view; 
    } 

    private void sendChildInfoToMainForm(EditText kidName, DatePicker kidDOB) 
    { 
     ((AddMemberActivity) this.Activity).currentNewMember.childName1 = kidName.Text; 
     ((AddMemberActivity) this.Activity).currentNewMember.childDOB1 = kidDOB.DateTime.ToShortDateString(); 
     Dismiss(); 
    } 
+0

Я также должен добавить, что это фрагмент ... Если это что-то значит (хотя у меня есть несколько других фрагментов, где такие вещи просто работают) – ccrunner863

+0

@Elltz здесь вы: http://pastebin.com/ pirchjpy – ccrunner863

+0

Я также загрузил вывод приложения из среды Xamarin IDE: http://pastebin.com/CzNeNNFC – ccrunner863

ответ

1

Включите точку останова и отлаживайте свой выход из него. Мое подозрение в том, что на самом деле это не kidName, а kidDOB, которые являются нулевыми, а скорее ваши безумные кастинги и ваше предположение, что вы можете установить свои данные в Activity, как вы это делаете.

Лучший способ добиться того, что вы делаете, - сделать DialogFragment ничего не зная о Activity, показывая это. Это также значительно облегчает повторное использование его в других местах в Activity, если вам нужно сделать это в какой-то момент.

Таким образом, вместо того, чтобы иметь способ sendChildInfoToMainForm. Вместо этого я создавал бы событие, передавая фактические данные, так что Activity может обрабатывать, что с ним делать, вместо того, чтобы давать DialogFragment этой ответственности.

public class ChildDialogEventArgs : EventArgs { 
    public string Name { get; set; } 
    public DateTime DateOfBirth { get; set; } 
} 

public delegate void ChildDialogEventHandler(object sender, ChildDialogEventArgs e); 

Тогда в вашем DialogFragment:

public event ChildDialogEventHandler Changed; 

, а затем в вашем Click случае сделать это вместо того, чтобы:

submitChild.Click += (_, __) => { 
    var handler = Changed; 
    if (handler != null) 
     handler(this, new ChildDialogEventArgs { 
      Name = childFirstName_editText.Text, 
      DateOfBirth = childDOB_datePicker.DateTime 
     }); 
} 

Тогда в вашем Activity вам просто нужно подписаться на Changed случае ваш DialogFragment и обработайте, что делать с данными там.

+0

Нечетная часть здесь заключается в том, что даже когда я прокомментирую свое кастинг и делаю чистую/перестроенную, он все равно ломается. Я начинаю думать, что это ошибка Xamarin, и мне просто нужно воссоздать делегата. Поскольку я новичок в Android, я еще не создал свои собственные события, но я обязательно попробую и отправлю отчет. – ccrunner863

+0

Что-то странное произошло здесь. Re набрал вид, и он сработал. Благодарим за отправку событийной реализации здесь, я еще не нашел лучшего объяснения того, как C# обрабатывает их. – ccrunner863

Смежные вопросы