summaryrefslogtreecommitdiff
path: root/Xamarin.Forms.Platform.Android/AppCompat/FormsFragmentPagerAdapter.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Xamarin.Forms.Platform.Android/AppCompat/FormsFragmentPagerAdapter.cs')
-rw-r--r--Xamarin.Forms.Platform.Android/AppCompat/FormsFragmentPagerAdapter.cs59
1 files changed, 59 insertions, 0 deletions
diff --git a/Xamarin.Forms.Platform.Android/AppCompat/FormsFragmentPagerAdapter.cs b/Xamarin.Forms.Platform.Android/AppCompat/FormsFragmentPagerAdapter.cs
new file mode 100644
index 00000000..99fbb396
--- /dev/null
+++ b/Xamarin.Forms.Platform.Android/AppCompat/FormsFragmentPagerAdapter.cs
@@ -0,0 +1,59 @@
+using Android.OS;
+using Android.Support.V4.App;
+using Java.Lang;
+
+namespace Xamarin.Forms.Platform.Android.AppCompat
+{
+ internal class FormsFragmentPagerAdapter<T> : FragmentPagerAdapter where T : Page
+ {
+ MultiPage<T> _page;
+
+ public FormsFragmentPagerAdapter(MultiPage<T> page, FragmentManager fragmentManager) : base(fragmentManager)
+ {
+ _page = page;
+ }
+
+ public override int Count => CountOverride;
+
+ public int CountOverride { get; set; }
+
+ public override Fragment GetItem(int position)
+ {
+ return FragmentContainer.CreateInstance(_page.Children[position]);
+ }
+
+ public override long GetItemId(int position)
+ {
+ return _page.Children[position].GetHashCode();
+ }
+
+ public override int GetItemPosition(Object objectValue)
+ {
+ var fragContainer = objectValue as FragmentContainer;
+ if (fragContainer != null && fragContainer.Page != null)
+ {
+ int index = _page.Children.IndexOf(fragContainer.Page);
+ if (index >= 0)
+ return index;
+ }
+ return PositionNone;
+ }
+
+ public override ICharSequence GetPageTitleFormatted(int position)
+ {
+ return new String(_page.Children[position].Title);
+ }
+
+ // http://stackoverflow.com/questions/18642890/fragmentstatepageradapter-with-childfragmentmanager-fragmentmanagerimpl-getfra/19099987#19099987
+ public override void RestoreState(IParcelable state, ClassLoader loader)
+ {
+ }
+
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing)
+ _page = null;
+ base.Dispose(disposing);
+ }
+ }
+} \ No newline at end of file