Когда перезапускается viewpager, он продолжает выполнять предыдущий фрагмент - PullRequest
1 голос
/ 15 апреля 2019

У действия есть homeFragment, содержащее viewPager.

Если я обновлю homeFragment, viewPager также будет обновлен с новыми данными.

НоСтарый фрагмент в viewPager повторно выполняется до создания адаптера.

Я не получаю четкого ответа, даже если я гуглю его

1.Код обновления homeFragment:

Fragment currentFragment = null;
currentFragment = getSupportFragmentManager().findFragmentById(R.id.content_frame);
final FragmentTransaction ft = getSupportFragmentManager().beginTransaction();

ft.detach(currentFragment);
ft.attach(currentFragment);
ft.commit();

2.адаптер

public class ChartViewPagerAdapter extends FragmentStatePagerAdapter {

   public ChartViewPagerAdapter(FragmentManager fm) {
      super(fm);
   }

   @Override
   public Fragment getItem(int i) {
      ChartFragment chartFragment = new ChartFragment();
      Bundle args = new Bundle();
      args.putInt("POSITION", i);
      chartFragment.setArguments(args);

      return chartFragment;
      //return ChartFragment.newInstance(i);
   }

   @Override
   public int getCount() {

       switch (MainActivity.countryCode) {
          case "US":
            return 4;
          case "KR":
            return 3;
          case "DE":
            return 3;
          case "JP":
            return 1;
          case "CN":
            return 1;
          case "HK":
            return 1;
          case "FR":
            return 3;
          case "GB":
            return 2;
          default:
            return 3;
       }
   }
}

Наиболее близким подходом является выполнение viewpager.setSaveParentEnlaled (false);, но если я увижу запись в журнале, он будет несколько раз вызывать один и тот же код, поэтому я получаю сообщение об ошибке.

Это не проблема. Если я изменю метод обновления , чтобы запустить метод в homeFragment немедленно, без использования способ отсоединения / присоединения , но дизайн должен использовать отсоединить / прикрепить путь .

1 Ответ

0 голосов
/ 15 апреля 2019

Вы должны позвонить на

viewpager.setAdapter(null)

или в котлине

viewpager.adapter = (null)

Будет сброшен ViewPager в исходное положение.

...