Перезагрузка данных на вкладке, выбранной в фрагменте, с использованием пейджера просмотра

У меня есть фрагменты внутри страницы просмотра, но я хотел бы перезагрузить данные на выбранной вкладке. Я попытался вернуть PositionNone в метод GetItemPosition в FragmentPagerAdapter, но он не работает.

Я попробовал добавить notifyDataSetChanged(); на вкладке, но выбрал исключение nullpointer. Я даже попытался установить viewPager.setOffscreenPageLimit Мне удалось найти ссылку: Заменить фрагмент внутри ViewPager но он находится на java. Мне удалось преобразовать большую часть кода в С#, но он застрял в прокомментированном коде. Я не уверен, как вызвать слушателя и создать экземпляр класса одновременно? Существует много аналогичных вопросов, но, к сожалению, нет в Xamarin Android.

Мне нужно сделать это в android для xamarin. Любая помощь будет оценена.

Это мой FragmentAdapter

public class TabsFragmentPagerAdapter : FragmentPagerAdapter
{
    private readonly Android.Support.V4.App.Fragment[] fragments;
    static readonly int NUM_ITEMS = 2;
    private readonly Android.Support.V4.App.FragmentManager FragmentManager;
    private Android.Support.V4.App.Fragment mFragmentAtPos0;
    private readonly ICharSequence[] titles;

    public TabsFragmentPagerAdapter(Android.Support.V4.App.FragmentManager fm, Android.Support.V4.App.Fragment[] fragments, ICharSequence[] titles) : base(fm)
    {
        this.fragments = fragments;
        this.titles = titles;

    }
    public override int Count
    {
        get
        {
            return fragments.Length;
        }
    }

    public override int GetItemPosition(Java.Lang.Object objectValue)
    {
        if (objectValue.GetType() == typeof(startJobFrag) && mFragmentAtPos0.GetType() == typeof(jobCaptureFrag))
        {
            return PositionNone;
        }
        return PositionUnchanged;
    }


    public override ICharSequence GetPageTitleFormatted(int position)
    {
        return titles[position];
    }


    public override Android.Support.V4.App.Fragment GetItem(int position)
    {
        if (position == 0)
        {
            if (mFragmentAtPos0 == null)
            {
                //not working
            }
            return mFragmentAtPos0;
        }
        else
        {
            return new jobCaptureFrag();
        }
    }

Это моя Actvity

 void FnInitTabLayout()
    {
        var fragments = new Android.Support.V4.App.Fragment[]
        {
new frag 1(),
new frag 2(),
new frag 3(),
        };

        //Tab title array
        var titles = CharSequence.ArrayFromStringArray(new[] {
    "Page 1",
    "Page 2",
     "Page 3",
   });

        var viewPager = FindViewById<ViewPager>(Resource.Id.viewpager);
        //viewpager holding fragment array and tab title text
        //viewPager.
        viewPager.Adapter = new TabsFragmentPagerAdapter(SupportFragmentManager, fragments, titles);

        // Give the TabLayout the ViewPager 
        tabLayout.SetupWithViewPager(viewPager);

        viewPager.PageSelected += (object sender, ViewPager.PageSelectedEventArgs e) =>
        {
            //FnInitTabLayout();
            if(e.Position == 0)
            {
              //handle tab click/selected

            }
        };
}

public interface FirstPageFragmentListener
{
    void onSwitchToNextFragment();
}

Фрагмент

public class Fragment1: Android.Support.V4.App.Fragment
{        
    public override void OnCreate(Bundle savedInstanceState)
    {
        base.OnCreate(savedInstanceState);

        // Create your fragment here
    }

    public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
    {
        // Use this to return your custom view for this Fragment
        // return inflater.Inflate(Resource.Layout.YourFragment, container, false);

        View view = inflater.Inflate(Resource.Layout.myview, container, false);

   }
}

Ответ 1

Мне удалось решить это самостоятельно. В моей деятельности я назвал NotifyDataSetChanged() on Pageselected event

активность

  ViewPager.PageSelected += (object sender,                 ViewPager.PageSelectedEventArgs e) =>
        {
            if (e.Position == 1)
            {
                _pager.Adapter.NotifyDataSetChanged();
            }
        };

Затем я изменил свой адаптер с FragmentPagerAdapter на FragmentStatePagerAdapter и переопределив GetItemPosition.

Адаптер

    public class TabsFragmentPagerAdapter : FragmentStatePagerAdapter
    {
        public override int GetItemPosition(Java.Lang.Object objectValue)
        {
            return PositionNone;
        }
    }

Обновить специальную вкладку - внутри адаптера

 public override Android.Support.V4.App.Fragment GetItem(int position)
    {
        if(position == 1) //second tab selected
        {
            NotifyDataSetChanged();
        }            
        return fragments[position];
    }

Я уверен, что есть лучший способ сделать это, но это работает.