Java 重新启动viewpager时,它将继续执行上一个片段

Java 重新启动viewpager时,它将继续执行上一个片段,java,android,android-fragments,android-viewpager,Java,Android,Android Fragments,Android Viewpager,该活动有一个homeFragment,其中包含一个viewPager 如果我刷新homeFragment,viewPager也会使用新数据重新生成 但是,viewPager中的旧片段将在创建适配器之前重新执行 我没有得到一个明确的答案,即使我用谷歌搜索它 1。homeFragment刷新代码: Fragment currentFragment = null; currentFragment = getSupportFragmentManager().findFragmentById(R.id.c

该活动有一个
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
    中运行该方法而不使用分离/附加方式,则这不是问题,但设计应使用分离/附加方式

  • 你必须打电话给警察

    viewpager.setAdapter(null)
    
    还是在科特林

    viewpager.adapter = (null)
    
    它会将ViewPager重置为开始位置。

    您必须调用

    viewpager.setAdapter(null)
    
    还是在科特林

    viewpager.adapter = (null)
    

    它会将ViewPager重置为开始位置。

    它不工作。问题是,不管适配器是什么,viewpager都会调用前面的片段。我认为这个问题与分离/连接方式有关,它不起作用。问题是,不管适配器是什么,viewpager都会调用前面的片段。我认为这个问题与分离/连接方式有关