ViewPager+FragmentPagerAdapter使用时发现notifyDataSetChanged()方法不起作用,查看FragmentPagerAdapter源码发现中
FragmentPagerAdapter中的Fragment是从FragmentManager中根据tag取的。如果FragmentManager中有相应的Fragment就会复用。也就导致了ViewPager不刷新的问题
解决方案:在刷新之前将FragmentManager中的Fragment清除一下
public void setFragments(ArrayList fragments) { if(this.fragments != null){ FragmentTransaction ft = fm.beginTransaction(); for(Fragment f:this.fragments){ ft.remove(f); } ft.commit(); ft=null; fm.executePendingTransactions(); } this.fragments = fragments; notifyDataSetChanged(); }