diff options
6 files changed, 141 insertions, 3 deletions
diff --git a/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Bugzilla40824.cs b/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Bugzilla40824.cs new file mode 100644 index 00000000..09b853e1 --- /dev/null +++ b/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Bugzilla40824.cs @@ -0,0 +1,57 @@ +using System; + +using Xamarin.Forms.CustomAttributes; +using Xamarin.Forms.Internals; +using System.Collections.Generic; + +#if UITEST +using Xamarin.UITest; +using NUnit.Framework; +#endif + +namespace Xamarin.Forms.Controls.Issues +{ + [Preserve(AllMembers = true)] + [Issue(IssueTracker.Bugzilla, 40824, "ListView item's contextual action menu not being closed upon navigation in AppCompat")] + public class Bugzilla40824 : TestContentPage + { + protected override void Init() + { + var list = new ListView + { + ItemsSource = new List<string> + { + "Cat", + "Dog", + "Rat" + }, + ItemTemplate = new DataTemplate(() => + { + var cell = new TextCell(); + cell.SetBinding(TextCell.TextProperty, "."); + cell.ContextActions.Add(new MenuItem + { + Text = "Action", + Icon = "icon", + IsDestructive = true, + Command = new Command(() => DisplayAlert("TITLE", "Context action invoked", "Ok")), + }); + return cell; + }), + }; + + Content = new StackLayout + { + Children = + { + new Button + { + Text = "Go to next page", + Command = new Command(() => Navigation.PushAsync(new ContentPage { Title = "Next Page", Content = new Label { Text = "Here" } })) + }, + list + } + }; + } + } +}
\ No newline at end of file diff --git a/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Bugzilla42364.cs b/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Bugzilla42364.cs new file mode 100644 index 00000000..2d85e315 --- /dev/null +++ b/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Bugzilla42364.cs @@ -0,0 +1,63 @@ +using System; + +using Xamarin.Forms.CustomAttributes; +using Xamarin.Forms.Internals; +using System.Collections.Generic; + +#if UITEST +using Xamarin.UITest; +using NUnit.Framework; +#endif + +namespace Xamarin.Forms.Controls.Issues +{ + [Preserve(AllMembers = true)] + [Issue(IssueTracker.Bugzilla, 42364, "ListView item's contextual action menu not being closed upon swiping a TabbedPage in AppCompat")] + public class Bugzilla42354 : TestTabbedPage + { + protected override void Init() + { + var list = new ListView + { + ItemsSource = new List<string> + { + "Cat", + "Dog", + "Rat" + }, + ItemTemplate = new DataTemplate(() => + { + var cell = new TextCell(); + cell.SetBinding(TextCell.TextProperty, "."); + cell.ContextActions.Add(new MenuItem + { + Text = "Action", + Icon = "icon", + IsDestructive = true, + Command = new Command(() => DisplayAlert("TITLE", "Context action invoked", "Ok")), + }); + return cell; + }), + }; + + Children.Add(new ContentPage + { + Title = "Page One", + Content = new StackLayout + { + Children = + { + new Button + { + Text = "Go to next page", + Command = new Command(() => Navigation.PushAsync(new ContentPage { Title = "Next Page", Content = new Label { Text = "Here" } })) + }, + list + } + } + }); + + Children.Add(new ContentPage { Title = "Page Two" }); + } + } +}
\ No newline at end of file diff --git a/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Xamarin.Forms.Controls.Issues.Shared.projitems b/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Xamarin.Forms.Controls.Issues.Shared.projitems index 67bfb32f..f9aeff69 100644 --- a/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Xamarin.Forms.Controls.Issues.Shared.projitems +++ b/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Xamarin.Forms.Controls.Issues.Shared.projitems @@ -105,6 +105,7 @@ <Compile Include="$(MSBuildThisFileDirectory)Bugzilla40333.cs" /> <Compile Include="$(MSBuildThisFileDirectory)Bugzilla31806.cs" /> <Compile Include="$(MSBuildThisFileDirectory)Bugzilla40858.cs" /> + <Compile Include="$(MSBuildThisFileDirectory)Bugzilla40824.cs" /> <Compile Include="$(MSBuildThisFileDirectory)Bugzilla40955.cs" /> <Compile Include="$(MSBuildThisFileDirectory)Bugzilla41078.cs" /> <Compile Include="$(MSBuildThisFileDirectory)Bugzilla40998.cs" /> @@ -118,6 +119,7 @@ <Compile Include="$(MSBuildThisFileDirectory)Bugzilla42074.cs" /> <Compile Include="$(MSBuildThisFileDirectory)Bugzilla42075.cs" /> <Compile Include="$(MSBuildThisFileDirectory)Bugzilla42329.cs" /> + <Compile Include="$(MSBuildThisFileDirectory)Bugzilla42364.cs" /> <Compile Include="$(MSBuildThisFileDirectory)CarouselAsync.cs" /> <Compile Include="$(MSBuildThisFileDirectory)Bugzilla34561.cs" /> <Compile Include="$(MSBuildThisFileDirectory)Bugzilla34727.cs" /> diff --git a/Xamarin.Forms.Platform.Android/AppCompat/NavigationPageRenderer.cs b/Xamarin.Forms.Platform.Android/AppCompat/NavigationPageRenderer.cs index 2bc182da..f591f057 100644 --- a/Xamarin.Forms.Platform.Android/AppCompat/NavigationPageRenderer.cs +++ b/Xamarin.Forms.Platform.Android/AppCompat/NavigationPageRenderer.cs @@ -573,6 +573,7 @@ namespace Xamarin.Forms.Platform.Android.AppCompat Current = view; + ((Platform)Element.Platform).NavAnimationInProgress = true; FragmentTransaction transaction = fm.BeginTransaction(); if (animated) @@ -606,6 +607,8 @@ namespace Xamarin.Forms.Platform.Android.AppCompat transaction.Show(toShow); else transaction.Add(Id, toShow); + + ((Platform)Element.Platform).NavAnimationInProgress = false; } else { @@ -614,13 +617,14 @@ namespace Xamarin.Forms.Platform.Android.AppCompat transaction.Hide(currentToHide); transaction.Add(Id, fragment); fragments.Add(fragment); + ((Platform)Element.Platform).NavAnimationInProgress = false; } } transaction.Commit(); // The fragment transitions don't really SUPPORT telling you when they end // There are some hacks you can do, but they actually are worse than just doing this: - + if (animated) { if (!removed) diff --git a/Xamarin.Forms.Platform.Android/AppCompat/TabbedPageRenderer.cs b/Xamarin.Forms.Platform.Android/AppCompat/TabbedPageRenderer.cs index 243e5c14..3c952a9a 100644 --- a/Xamarin.Forms.Platform.Android/AppCompat/TabbedPageRenderer.cs +++ b/Xamarin.Forms.Platform.Android/AppCompat/TabbedPageRenderer.cs @@ -264,7 +264,9 @@ namespace Xamarin.Forms.Platform.Android.AppCompat void ScrollToCurrentPage() { + ((Platform)Element.Platform).NavAnimationInProgress = true; _viewPager.SetCurrentItem(Element.Children.IndexOf(Element.CurrentPage), UseAnimations); + ((Platform)Element.Platform).NavAnimationInProgress = false; } void UpdateIgnoreContainerAreas() diff --git a/Xamarin.Forms.Platform.Android/Renderers/ListViewAdapter.cs b/Xamarin.Forms.Platform.Android/Renderers/ListViewAdapter.cs index 5dedef6c..a38aea0a 100644 --- a/Xamarin.Forms.Platform.Android/Renderers/ListViewAdapter.cs +++ b/Xamarin.Forms.Platform.Android/Renderers/ListViewAdapter.cs @@ -52,7 +52,11 @@ namespace Xamarin.Forms.Platform.Android realListView.OnItemClickListener = this; realListView.OnItemLongClickListener = this; - MessagingCenter.Subscribe<Platform>(this, Platform.CloseContextActionsSignalName, p => CloseContextAction()); + var platform = _listView.Platform; + if (platform.GetType() == typeof(AppCompat.Platform)) + MessagingCenter.Subscribe<AppCompat.Platform>(this, AppCompat.Platform.CloseContextActionsSignalName, p => CloseContextAction()); + else + MessagingCenter.Subscribe<Platform>(this, Platform.CloseContextActionsSignalName, p => CloseContextAction()); } public override int Count @@ -325,7 +329,13 @@ namespace Xamarin.Forms.Platform.Android if (disposing) { CloseContextAction(); - MessagingCenter.Unsubscribe<Platform>(this, Platform.CloseContextActionsSignalName); + + var platform = _listView.Platform; + if (platform.GetType() == typeof(AppCompat.Platform)) + MessagingCenter.Unsubscribe<AppCompat.Platform>(this, Platform.CloseContextActionsSignalName); + else + MessagingCenter.Unsubscribe<Platform>(this, Platform.CloseContextActionsSignalName); + _realListView.OnItemClickListener = null; _realListView.OnItemLongClickListener = null; |