Recargar datos en la pestaña seleccionada en un fragmento utilizando el paginador de vistas

Tengo mis fragmentos dentro de la página de vista, pero me gustaría recargar los datos en la pestaña seleccionada. Intenté devolver PositionNone en el método GetItemPosition en mi FragmentPagerAdapter pero no funciona.

Intenté agregar notifyDataSetChanged(); En la pestaña seleccionada pero lanza la excepción nullpointer. Incluso traté de establecer el viewPager.setOffscreenPageLimit He logrado encontrar el enlace: Reemplazar Fragmento dentro de un ViewPager, pero está en java. He conseguido convertir la mayor parte del código a c #, pero se queda atascado en el código comentado. No estoy seguro de cómo llamar al oyente y instanciar la clase al mismo tiempo? Hay un montón de preguntas similares, pero por desgracia no una en Xamarin Android.

Tengo que hacer esto en xamarin android. Cualquier ayuda será apreciada.

Este es mi 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(); } } 

Esta es mi actividad

  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(); } 

Fragmento

 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); } } 

Me las arreglé para resolverlo por mi cuenta. En Mi actividad llamé NotifyDataSetChanged() en el evento Pageselected

Actividad

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

Entonces cambié mi adaptador de FragmentPagerAdapter a FragmentStatePagerAdapter y GetItemPosition el GetItemPosition .

Adaptador

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

Actualizar una pestaña específica – dentro del adaptador

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

Estoy seguro de que hay una mejor manera de hacerlo, pero esto funciona.

  • Xamarin forma la imagen de Android no se está comprimiendo
  • ¿Cómo tratar con "$ {applicationid}" en Xamarin?
  • Xamarin C # Android 7.0 en Moto G5 Plus teléfono, ventana de diálogo fragmento de fondo transparente procesamiento de error
  • Xamarin apk en Blackberry (> = 10.2.1)
  • Anulación de transición pendiente con objeto de animación en lugar de id de recurso
  • Advertencia IDE0006 Se ha producido un error al cargar el proyecto
  • La compilación de aplicaciones de Android no genera recursos de paquetes
  • Reproducir video en Android usando Xamarin
  • Cómo ejecutar código después de un retraso en Xamarin Android
  • El modo de bloqueo de DrawerLayout no funciona como se esperaba
  • Xamarin android guardar archivo de texto
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.