I am trying to create something very similar to this design from the Material Design website .

Basically, I have a list of CardViews, each of which has several types that the user can carry between them. (The first map in the image)
I started by implementing a simple recyclerview that contains a CardView, and for each card I implemented a FragmentStatePagerAdapter that contains several fragments that the user can scroll through and it works (sort of). The problem I am facing is very similar to this problem. The fragment in the ViewPager using the FragmentPagerAdapter is empty the second time it is viewed , where the fragments either will not load or they disappear when scrolling up and down. I tried all the possible fixes that people suggested, and I still can't get this to work.
I was wondering if there is a better way to do this.
Here is my code (C # - Xamarin)
using System; using Android.Support.V7.Widget; using System.Collections.Generic; using Android.Views; using Android.Widget; using System.Security.Cryptography; using Android.Support.V4.View; using Android.Support.V4.App; using Android.Runtime; using Android.OS; using Android.Content; using Android.App; using Android.Support.V7.App; using JavaString = Java.Lang.String; using Android.Util; using Android.Animation; using System.ComponentModel.Design.Serialization; namespace Answers.PortalAppXamarin.Droid { public enum MyTestAdapterItemType { Type1, Type2, Type3 }; public class MyTestDataObj { public MyTestAdapterItemType type { get; set; } public string data { get; set; } } public class PagerFragmentAdapter : Android.Support.V4.App.FragmentStatePagerAdapter { public List<MyTestPageFragmentContainer> Tabs { get; set; } public PagerFragmentAdapter(Android.Support.V4.App.FragmentManager fm) : base(fm) { } public override Android.Support.V4.App.Fragment GetItem(int position) { return Tabs [position].Fragment; } public override Java.Lang.ICharSequence GetPageTitleFormatted(int position) { return new JavaString(Tabs [position].Title); } public override int GetItemPosition (Java.Lang.Object objectValue) { for (int i = 0; i < Tabs.Count; i++) { if (Tabs[i].Fragment.Equals (objectValue) ) { return i; } } return PositionNone; } public override int Count { get { return Tabs.Count; } } } public class MyTestPageFragmentContainer { public string Title { get; set; } public Android.Support.V4.App.Fragment Fragment { get; set; } public MyTestPageFragmentContainer(string title, Android.Support.V4.App.Fragment fragment) { this.Title = title; this.Fragment = fragment; } } public class BaseFragment : Android.Support.V4.App.Fragment { public static Android.Support.V4.App.Fragment newInstance(int position) { BaseFragment f = new BaseFragment (); // Supply num input as an argument. Bundle args = new Bundle (); args.PutInt ("num", position); f.Arguments = (args); return f; } } public class PageFragment1 : BaseFragment { View RootView; public override void OnCreate (Bundle savedInstanceState) { base.OnCreate (savedInstanceState); } public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { RootView = inflater.Inflate (Resource.Layout.LoadingIndicatorOverlay, container, false); return RootView; } public override void OnResume () { base.OnResume (); ValueAnimator _animator = ValueAnimator.OfFloat(0, 1); _animator.SetDuration(2000); _animator.Update += (object sender, ValueAnimator.AnimatorUpdateEventArgs e) => { if (RootView != null) { RootView.Alpha = (float)e.Animation.AnimatedValue; } }; } } public class PageFragment2 : BaseFragment { View RootView; public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { RootView = inflater.Inflate(Resource.Layout.MeasureListItem, container, false); return RootView; } public override void OnResume () { base.OnResume (); ValueAnimator _animator = ValueAnimator.OfFloat(0, 1); _animator.SetDuration(2000); _animator.Update += (object sender, ValueAnimator.AnimatorUpdateEventArgs e) => { if (RootView != null) { RootView.Alpha = (float)e.Animation.AnimatedValue; } }; } } public abstract class BaseCardViewHolder : RecyclerView.ViewHolder { public ViewGroup Header; public ViewGroup Footer; public TextView TitleTextView; public Button MoreInfoBtn; public ViewPager ContentViewPager; public PagerFragmentAdapter Adapter; public List<MyTestPageFragmentContainer> Tabs; public Android.Support.V4.App.FragmentManager fm; public BaseCardViewHolder(View rootView, Android.Support.V4.App.FragmentManager fm) : base(rootView) { Header = rootView.FindViewById<ViewGroup> (Resource.Id.card_view_header); Footer = rootView.FindViewById<ViewGroup> (Resource.Id.card_view_footer); ContentViewPager = rootView.FindViewById<ViewPager> (Resource.Id.card_view_content_viewPager); TitleTextView = Header.FindViewById<TextView> (Resource.Id.card_view_title); MoreInfoBtn = Footer.FindViewById<Button> (Resource.Id.card_view_moreInfoBtn); this.fm = fm; Tabs = setupTabs (); if (Tabs != null && fm != null) { Adapter = new PagerFragmentAdapter (fm); Adapter.Tabs = Tabs; ContentViewPager.Adapter = Adapter; } } public void RefreshViewPager() { ContentViewPager.Adapter.NotifyDataSetChanged (); } public abstract List<MyTestPageFragmentContainer> setupTabs (); } public class Type1ViewHolder : BaseCardViewHolder { public Type1ViewHolder(View v, Android.Support.V4.App.FragmentManager fm) : base(v, fm) { } public override List<MyTestPageFragmentContainer> setupTabs() { return new List<MyTestPageFragmentContainer> { new MyTestPageFragmentContainer ("Tab1", new PageFragment1 ()), new MyTestPageFragmentContainer ("Tab2", new PageFragment1 ()) }; } } public class Type2ViewHolder : BaseCardViewHolder { public Type2ViewHolder(View v, Android.Support.V4.App.FragmentManager fm) : base(v, fm) { } public override List<MyTestPageFragmentContainer> setupTabs() { return new List<MyTestPageFragmentContainer> { new MyTestPageFragmentContainer ("Tab1", new PageFragment2 ()), new MyTestPageFragmentContainer ("Tab2", new PageFragment2 ()), new MyTestPageFragmentContainer ("Tab1", new PageFragment1 ()), new MyTestPageFragmentContainer ("Tab2", new PageFragment1 ()), }; } } public class Type3ViewHolder : BaseCardViewHolder { public Type3ViewHolder(View v, Android.Support.V4.App.FragmentManager fm) : base(v, fm) { } public override List<MyTestPageFragmentContainer> setupTabs() { return new List<MyTestPageFragmentContainer> { new MyTestPageFragmentContainer ("Tab1", new PageFragment2 ()), new MyTestPageFragmentContainer ("Tab2", new PageFragment1 ()), new MyTestPageFragmentContainer ("Tab3", new PageFragment2 ()), new MyTestPageFragmentContainer ("Tab4", new PageFragment1 ()) }; } } public class MyTestRecyclerAdapter : RecyclerView.Adapter { public Android.Support.V4.App.FragmentManager FM; readonly List<MyTestDataObj> myTestDataList = new List<MyTestDataObj>{ new MyTestDataObj {type = MyTestAdapterItemType.Type1, data = "Item 1"}, new MyTestDataObj {type = MyTestAdapterItemType.Type1, data = "Item 2"}, new MyTestDataObj {type = MyTestAdapterItemType.Type2, data = "Item 3"}, new MyTestDataObj {type = MyTestAdapterItemType.Type3, data = "Item 4"}, new MyTestDataObj {type = MyTestAdapterItemType.Type1, data = "Item 5"}, new MyTestDataObj {type = MyTestAdapterItemType.Type2, data = "Item 6"}, new MyTestDataObj {type = MyTestAdapterItemType.Type1, data = "Item 7"}, new MyTestDataObj {type = MyTestAdapterItemType.Type1, data = "Item 8"}, new MyTestDataObj {type = MyTestAdapterItemType.Type2, data = "Item 9"}, new MyTestDataObj {type = MyTestAdapterItemType.Type3, data = "Item 10"}, new MyTestDataObj {type = MyTestAdapterItemType.Type1, data = "Item 11"}, new MyTestDataObj {type = MyTestAdapterItemType.Type2, data = "Item 12"}, new MyTestDataObj {type = MyTestAdapterItemType.Type1, data = "Item 13"}, new MyTestDataObj {type = MyTestAdapterItemType.Type1, data = "Item 14"}, new MyTestDataObj {type = MyTestAdapterItemType.Type2, data = "Item 15"}, new MyTestDataObj {type = MyTestAdapterItemType.Type3, data = "Item 16"}, new MyTestDataObj {type = MyTestAdapterItemType.Type1, data = "Item 17"}, new MyTestDataObj {type = MyTestAdapterItemType.Type2, data = "Item 18"}, new MyTestDataObj {type = MyTestAdapterItemType.Type1, data = "Item 19"}, new MyTestDataObj {type = MyTestAdapterItemType.Type1, data = "Item 20"}, new MyTestDataObj {type = MyTestAdapterItemType.Type2, data = "Item 21"}, new MyTestDataObj {type = MyTestAdapterItemType.Type3, data = "Item 22"}, new MyTestDataObj {type = MyTestAdapterItemType.Type1, data = "Item 23"}, new MyTestDataObj {type = MyTestAdapterItemType.Type2, data = "Item 24"}, };
Here is a demo:

Note. Iβm sure itβs possible, since the Google Analytics app for iOS and Android has the same design as I'm looking for. 
I would be grateful for any help, thanks