From 9c36f133ad1017b7126330768a8b6c986a051a95 Mon Sep 17 00:00:00 2001 From: Paul DiPietro Date: Mon, 18 Jul 2016 18:20:20 -0500 Subject: [Android] Add dialog null check for AppCompat Picker OnClick (#257) Multiple, rapid taps on the Picker in AppCompat could potentially open more than one dialog, causing a crash upon their being closed. Adding a null check for the dialog prevents more than one from being created. --- .../AppCompat/PickerRenderer.cs | 32 ++++++++++++---------- 1 file changed, 17 insertions(+), 15 deletions(-) diff --git a/Xamarin.Forms.Platform.Android/AppCompat/PickerRenderer.cs b/Xamarin.Forms.Platform.Android/AppCompat/PickerRenderer.cs index 492b553b..9e81cf2d 100644 --- a/Xamarin.Forms.Platform.Android/AppCompat/PickerRenderer.cs +++ b/Xamarin.Forms.Platform.Android/AppCompat/PickerRenderer.cs @@ -93,25 +93,27 @@ namespace Xamarin.Forms.Platform.Android.AppCompat void OnClick() { Picker model = Element; - using (var builder = new AlertDialog.Builder(Context)) + if (_dialog == null) { - builder.SetTitle(model.Title ?? ""); - string[] items = model.Items.ToArray(); - builder.SetItems(items, (s, e) => ((IElementController)model).SetValueFromRenderer(Picker.SelectedIndexProperty, e.Which)); - - builder.SetNegativeButton(global::Android.Resource.String.Cancel, (o, args) => { }); + using (var builder = new AlertDialog.Builder(Context)) + { + builder.SetTitle(model.Title ?? ""); + string[] items = model.Items.ToArray(); + builder.SetItems(items, (s, e) => ((IElementController)model).SetValueFromRenderer(Picker.SelectedIndexProperty, e.Which)); - _dialog = builder.Create(); - } + builder.SetNegativeButton(global::Android.Resource.String.Cancel, (o, args) => { }); - _dialog.SetCanceledOnTouchOutside(true); - _dialog.DismissEvent += (sender, args) => - { - _dialog.Dispose(); - _dialog = null; - }; + _dialog = builder.Create(); + } + _dialog.SetCanceledOnTouchOutside(true); + _dialog.DismissEvent += (sender, args) => + { + _dialog.Dispose(); + _dialog = null; + }; - _dialog.Show(); + _dialog.Show(); + } } void RowsCollectionChanged(object sender, EventArgs e) -- cgit v1.2.3