我正在通过像这样的片段填充视图寻呼机
pagerAdapter = new PagerAdapter(getSupportFragmentManager());
mViewPager = (ViewPager) findViewById(R.id.container);
for (int i = 0; i < 10; i++) {
newfragment fragobj = new newfragment();
fragobj.setArguments(bundle);
pagerAdapter.addFragment(fragobj, "Category");
}
mViewPager.setAdapter(pagerAdapter);
mViewPager.setCurrentItem(page);
我希望清除所有碎片并在清除后添加新碎片。如果我现在添加新片段,则会使用旧片段进行广告。
我尝试了很多堆栈溢出答案,但没有一个能为我工作。
答案 0 :(得分:6)
该片段已被删除并销毁。问题是观点。
只有这对我有用
myViewPager.setSaveFromParentEnabled(false);
干杯!
答案 1 :(得分:2)
在ViewPagerAdapter中添加此方法,并在想要从viewPager中清除片段时调用它
public void clear() {
FragmentTransaction transaction = manager.beginTransaction();
for (Fragment fragment : mFragmentList) {
transaction.remove(fragment);
}
mFragmentList.clear();
transaction.commitAllowingStateLoss();
}
答案 2 :(得分:1)
使用ViewPager2
(1.0.0)和FragmentStateAdapter
,我还发现在使用notifyDataSetChanged
更新数据集后,即使与当前数据相对应的数据也无法重新创建当前视图视图已更改。显然,notifyDataSetChanged
不会对更改内容进行非常彻底的调查,并假设当前视图仍然正确。
我发现的解决方法是简单地再次设置与先前数据集相同的适配器:
viewPager2.setAdapter(myFragmentStateAdapter);
显然,设置适配器会使它刷新高速缓存的视图,这当然非常好。幸运的是,它不会检查适配器是否相同。
答案 3 :(得分:0)
mViewPager:是您用来设置片段的视图
mViewPager = (YourViewPager) findViewById(R.id.myPager);
表:只是我所有碎片位置的整数列表
public void destroyAllItem() {
int mPosition = mViewPager.getCurrentItem();
int mPositionMax = mViewPager.getCurrentItem()+1;
if (TABLE.size() > 0 && mPosition < TABLE.size()) {
if (mPosition > 0) {
mPosition--;
}
for (int i = mPosition; i < mPositionMax; i++) {
try {
Object objectobject = this.instantiateItem(mViewPager, TABLE.get(i).intValue());
if (objectobject != null)
destroyItem(mViewPager, TABLE.get(i).intValue(), objectobject);
} catch (Exception e) {
Log.i(TAG, "no more Fragment in FragmentPagerAdapter");
}
}
}
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
super.destroyItem(container, position, object);
if (position <= getCount()) {
FragmentManager manager = ((Fragment) object).getFragmentManager();
FragmentTransaction trans = manager.beginTransaction();
trans.remove((Fragment) object);
trans.commit();
}
}