该 Activity 有一个 homeFragment
,其中包含 viewPager
。
如果我刷新 homeFragment
,viewPager
也会使用新数据重新生成。
但是在创建适配器之前,viewPager
中的旧 fragment 会被重新执行。
即使我用谷歌搜索也没有得到明确的答案
<强>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)
或者在 kotlin 中
viewpager.adapter = (null)
它将把 ViewPager 重置到开始位置。
关于java - 当viewpager重新启动时,它会继续执行之前的fragment,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55683385/