Intereting Posts
Программно использовать setTextSize для? Attr / textAppearanceLarge Как изменить размер изображения, которое я выбрал из галереи в Android? Открытие новой активности Android с помощью webview показывает пустой (белый) экран вместо содержимого html Почему я должен использовать неприглаженные апки? Почему кнопка вверх присутствует без setDisplayHomeAsUpEnabled ()? Как преобразовать изображение в строку base64 Android google maps marker отключить навигацию Android.database.CursorWindowAllocationException: выделение окна курсора 2048 кб не удалось даже после закрытия курсора Поделиться текстом на Facebook из приложения Android через ACTION_SEND Поддержка Android для AVRCP DexIndexOverflowException: Невозможно объединить новый индекс 65772 в инструкцию, отличную от jumbo !: Jumbo Mode? И / или Multi-Dex? Что стоит за сценой? Как добавить проект библиотеки в Android Studio? Как получить смещение вида внутри ScrollView? Воссоздание флеш-апи-звонка в Android с помощью дооснащения Как запустить приложение Android в устройстве?

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

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

Я попытался добавить notifyDataSetChanged(); На вкладке, но выбрасывает исключение nullpointer. Я даже попытался установить viewPager.setOffscreenPageLimit Мне удалось найти ссылку: Заменить фрагмент внутри ViewPager, но он находится на java. Мне удалось преобразовать большую часть кода в c #, но он застрял в прокомментированном коде. Я не уверен, как вызвать слушателя и создать экземпляр класса одновременно? Существует много подобных вопросов, но, к сожалению, не один в 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); } } 

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

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

Мероприятия

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

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