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.
- Cómo cambiar los colores de la forma en Drawable?
- Vinculación de OxyPlot a través de MVVMCross en Xamarin.Android
- El código funciona en Xamarin Android pero no funciona en Java (HttpPost JSON)
- Obtenga el contexto de Android en el proyecto PCL
- Referencias de nombre de clase de andamio de Xamarin
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); } }
- SetPage (Xamarin.Forms.Page) 'es un error obsoleto - Android
- RelativeLayout en el cálculo del ancho de StackLayout
- Xamarin C # EditText InputType Contraseña
- Xamarin Forms PCL HttpClient lanzando una excepción no controlada en Android
- Reciclaje Bitmap no libera memoria
- Cómo tomar instantánea de montón de Xamarin.Android's Mono VM?
- Generación de ZeroMQ para el emulador de Android x86
- ¿Cómo enlazar el TextColor de un TextView?
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.
- Cómo acortar el período de reintento de descarga de almacenamiento de Firebase en Error de red
- No se puede enlazar a XXXX local para el depurador