diff --git a/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Issue13399.xaml b/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Issue13399.xaml
new file mode 100644
index 00000000000..ce7adfc63a5
--- /dev/null
+++ b/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Issue13399.xaml
@@ -0,0 +1,85 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Issue13399.xaml.cs b/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Issue13399.xaml.cs
new file mode 100644
index 00000000000..52cf9118813
--- /dev/null
+++ b/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Issue13399.xaml.cs
@@ -0,0 +1,90 @@
+using Xamarin.Forms.CustomAttributes;
+using Xamarin.Forms.Internals;
+using System.Collections.ObjectModel;
+using System.Windows.Input;
+
+#if UITEST
+using Xamarin.UITest;
+using NUnit.Framework;
+using Xamarin.Forms.Core.UITests;
+#endif
+
+namespace Xamarin.Forms.Controls.Issues
+{
+ [Preserve(AllMembers = true)]
+ [Issue(IssueTracker.Github, 13399,
+ "[Bug] The specified child already has a parent",
+ PlatformAffected.Android)]
+ public partial class Issue13399 : TestContentPage
+ {
+ public Issue13399()
+ {
+#if APP
+ InitializeComponent();
+ BindingContext = new Issue13399ViewModel();
+#endif
+ }
+
+ protected override void Init()
+ {
+
+ }
+ }
+
+ [Preserve(AllMembers = true)]
+ public class Issue13399Model
+ {
+ public int Id { get; set; }
+ public string Text { get; set; }
+ }
+
+ [Preserve(AllMembers = true)]
+ public class Issue13399ViewModel : BindableObject
+ {
+ ObservableCollection _items;
+
+ public Issue13399ViewModel()
+ {
+ Items = new ObservableCollection();
+ LoadItems();
+ }
+
+ public ObservableCollection Items
+ {
+ get { return _items; }
+ set
+ {
+ _items = value;
+ OnPropertyChanged();
+ }
+ }
+
+ public ICommand DeleteLastItemCommand => new Command(ExecuteDeleteLastItem);
+ public ICommand DeleteItemCommand => new Command(ExecuteDeleteItem);
+
+ void LoadItems()
+ {
+ for (int i = 0; i < 100; i++)
+ {
+ Items.Add(new Issue13399Model { Id = i + 1, Text = $"Item {i + 1}" });
+ }
+ }
+
+ void ExecuteDeleteLastItem()
+ {
+ if (Items.Count == 0)
+ return;
+
+ var index = Items.Count - 1;
+ Items.RemoveAt(index);
+ }
+
+ void ExecuteDeleteItem(Issue13399Model item)
+ {
+ if (Items.Count == 0)
+ return;
+
+ Items.Remove(item);
+ }
+ }
+}
\ 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 4b93a91ad76..98b9dda6e12 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
@@ -1768,6 +1768,7 @@
+
@@ -2223,6 +2224,9 @@
MSBuild:UpdateDesignTimeXaml
+
+ MSBuild:UpdateDesignTimeXaml
+
MSBuild:UpdateDesignTimeXaml
diff --git a/Xamarin.Forms.Platform.Android/Renderers/SwipeViewRenderer.cs b/Xamarin.Forms.Platform.Android/Renderers/SwipeViewRenderer.cs
index f19694777f1..a7757ca2bb5 100644
--- a/Xamarin.Forms.Platform.Android/Renderers/SwipeViewRenderer.cs
+++ b/Xamarin.Forms.Platform.Android/Renderers/SwipeViewRenderer.cs
@@ -382,17 +382,15 @@ void PropagateParentTouch()
void UpdateContent()
{
- if (_contentView != null)
- {
- _contentView.RemoveFromParent();
- _contentView.Dispose();
- _contentView = null;
- }
+ RemoveAllViews();
if (Element.Content == null)
_contentView = CreateEmptyContent();
else
- _contentView = CreateContent();
+ _contentView = GetOrCreateContent();
+
+ if (_contentView.Parent != null)
+ _contentView.RemoveFromParent();
AddView(_contentView);
@@ -408,7 +406,7 @@ AView CreateEmptyContent()
return emptyContentView;
}
- AView CreateContent()
+ AView GetOrCreateContent()
{
var renderer = Element.Content.GetRenderer() ?? Platform.CreateRendererWithContext(Element.Content, Context);
Platform.SetRenderer(Element.Content, renderer);