ViewPager用FragmentPagerAdapter做适配器怎么动态删除指定页面?
如题,我现在有两种实现方法
方法一:已经可以从删除的地方回传删除的Fragment在List中的位置,所以更新适配器中的List,remove掉删除的。然后删除ViewPager缓存中对应的Fragment。再notifyDataSetChanged()
List<Fragment> fragments = fm.getFragments();
FragmentTransaction transaction = fm.beginTransaction();
// mDeleteCityArry是删除的Fragment的位置的数组
for (int i = 0; i < mDeleteCityArry.length; i++) {
mFragmentList.remove(mDeleteCityArry[i]);
//删除相应的缓存碎片。
transaction.remove(fragments.get(mDeleteCityArry[i]));
transaction.commit();
//重新设置适配器中的List
mAdapter.setList(mFragmentList);
mAdapter.notifyDataSetChanged();
}
方法二:其实和方法一类似,但是是删除所有ViewPager中缓存的Fragment。再删除mFragmentList中的所有内容,全部重建Fragment,重新设置适配器中的List。一了百了。
mForecasts = mforecastDao.getAllCity();
forecastSize=mForecasts.size();
List<Fragment> fragments = fm.getFragments();
FragmentTransaction transaction = fm.beginTransaction();
//把所有缓存碎片都删了。
for (Fragment childFragment : fm.getFragments()) {
transaction.remove(childFragment);
transaction.commit();
}
//再全部重新创建。
mFragmentList.clear();
for (int i = 0; i < forecastSize; i++) {
mFragmentList.add(OutterFragment.newInstance(mForecasts.get(i).getCity()));
}
//重新设置适配器中的List
mAdapter.setList(mFragmentList);
mAdapter.notifyDataSetChanged();
当然也试过下面这个方法,也没用。
public int getItemPosition(Object object) {
return POSITION_NONE;
}
总是会在重建Framment的出现空指针错误。应该是这里删除的问题。添加用类似的方法是没问题的。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
我自己的解决方案,行得通。
这个方法必须要在适配器里面新建碎片。
通过setList重设list里面的内容,再改变tag,再申请刷新。
下面是我参造的来源,那边写的比较详细
http://stackoverflow.com/questions/10396321/remove-fragment-page-from-viewpager-in-android
这个需求我也遇到过,在stackoverflow找到过答案,大概的方法是重写一个PagerAdapter,把View保存在Adapter的私有数组成员里,在需要删除的时候先将ViewPager的Adapter设为null,然后更新View数组(删除指定的View),然后重新设置Adapter。
原问题的回答如下以供参考:android - dynamically add and remove view to viewpager - Stack Overflow
删除Arraylist中对应的元素,重新设置Adapter,最后记得用fragmentManager remove掉你要删除的fragment