最近在改一个前辈的项目,历史性的老bug被测试测出来了,没法只能硬着头皮改,改了一天也没改好,最后心灰一冷的时候改了个类名尽然解决了,简直醉的不行。。
项目使用的是常用的下部页签加fragment,首页fragment中使用SmartTabLayout(频道)+ViewPager+Fragment(列表)
本来没有任何问题,切换频道都正常,但是新增了一个用户订阅频道的需求,突然就除了bug,在用户自定义频道(新增或排序)之后,返回首页SmartTabLayout的频道更改没有问题,但是对应的子fragment和频道怎么都对不上,找了好久原因,以为是viewpager缓存,后来排除,以为是viewpager的adapter中传入的FragmentManager中缓存的fragment没有清除,但是没有找到是否是该原因,后来在adapter中重写了destoryItem之后发现连fragment都不显示了
最后把继承FragmentPagerAdapter改为了FragmentStatePagerAdapter之后尽然好了,但是我还是没有找到为什么会这样,不过也是解决了这个bug,记录一下,以后找到原因再更吧。
public class NewsContainerPagerAdapterNew extends FragmentStatePagerAdapter { private List<Fragment> list; private List<ResponseNewsCategoryEntity> mNewsCategoryList = null; public NewsContainerPagerAdapterNew(Context context, FragmentManager fm, List<ResponseNewsCategoryEntity> newsCategoryList, List<Fragment> list) { super(fm); this.list = list; mNewsCategoryList = newsCategoryList; } @Override public Fragment getItem(int position) { return list.get(position); } @Override public int getCount() { return null != mNewsCategoryList ? mNewsCategoryList.size() : 0; } @Override public CharSequence getPageTitle(int position) { return null != mNewsCategoryList ? mNewsCategoryList.get(position).getCatname() : null; } @Override public boolean isViewFromObject(View view, Object obj) { return view == ((Fragment) obj).getView(); } @Override public void destroyItem(ViewGroup container, int position, Object object) { Fragment fragment = ((Fragment) object); } }