summaryrefslogtreecommitdiff
path: root/Xamarin.Forms.Platform.Android/Renderers/TabbedRenderer.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Xamarin.Forms.Platform.Android/Renderers/TabbedRenderer.cs')
-rw-r--r--Xamarin.Forms.Platform.Android/Renderers/TabbedRenderer.cs75
1 files changed, 75 insertions, 0 deletions
diff --git a/Xamarin.Forms.Platform.Android/Renderers/TabbedRenderer.cs b/Xamarin.Forms.Platform.Android/Renderers/TabbedRenderer.cs
new file mode 100644
index 00000000..35404a64
--- /dev/null
+++ b/Xamarin.Forms.Platform.Android/Renderers/TabbedRenderer.cs
@@ -0,0 +1,75 @@
+using System.ComponentModel;
+using AButton = Android.Widget.Button;
+using AView = Android.Views.View;
+
+namespace Xamarin.Forms.Platform.Android
+{
+ public class TabbedRenderer : VisualElementRenderer<TabbedPage>
+ {
+ public TabbedRenderer()
+ {
+ AutoPackage = false;
+ }
+
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && Element != null && Element.Children.Count > 0)
+ {
+ RemoveAllViews();
+ foreach (Page pageToRemove in Element.Children)
+ {
+ IVisualElementRenderer pageRenderer = Platform.GetRenderer(pageToRemove);
+ if (pageRenderer != null)
+ pageRenderer.Dispose();
+ pageToRemove.ClearValue(Platform.RendererProperty);
+ }
+ }
+
+ base.Dispose(disposing);
+ }
+
+ protected override void OnAttachedToWindow()
+ {
+ base.OnAttachedToWindow();
+ Element.SendAppearing();
+ }
+
+ protected override void OnDetachedFromWindow()
+ {
+ base.OnDetachedFromWindow();
+ Element.SendDisappearing();
+ }
+
+ protected override void OnElementChanged(ElementChangedEventArgs<TabbedPage> e)
+ {
+ base.OnElementChanged(e);
+
+ TabbedPage tabs = e.NewElement;
+ if (tabs.CurrentPage != null)
+ SwitchContent(tabs.CurrentPage);
+ }
+
+ protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e)
+ {
+ base.OnElementPropertyChanged(sender, e);
+
+ if (e.PropertyName == "CurrentPage")
+ SwitchContent(Element.CurrentPage);
+ }
+
+ protected virtual void SwitchContent(Page view)
+ {
+ Context.HideKeyboard(this);
+
+ RemoveAllViews();
+
+ if (view == null)
+ return;
+
+ if (Platform.GetRenderer(view) == null)
+ Platform.SetRenderer(view, Platform.CreateRenderer(view));
+
+ AddView(Platform.GetRenderer(view).ViewGroup);
+ }
+ }
+} \ No newline at end of file