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

#java #android #android-fragments #android-viewpager

#java #Android #android-фрагменты #android-viewpager

Вопрос:

Действие имеет a homeFragment , которое содержит a 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;
       }
   }
}
  
  1. Самый близкий подход — при выполнении viewpager.setSaveParentEnlaled (false); , но если я увижу запись журнала, она будет вызываться снова и тем же кодом несколько раз, поэтому я получаю сообщение об ошибке.

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

Ответ №1:

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

 viewpager.setAdapter(null)
  

или в kotlin

 viewpager.adapter = (null)
  

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

Комментарии:

1. это не работает. проблема в том, что независимо от адаптера viewpager вызывает предыдущие фрагменты. Я думаю, что эта проблема связана с способом отсоединения / присоединения