您的位置:首页 > 其它

fragment 动态加载,删除

2015-10-22 19:11 225 查看
2、最关键的地方出来了:--pagerAdapter, 一定要替换成下文的样式才能正常删除fragment

以下为引用内容:
public class HomePageAdapter extends FragmentStatePagerAdapter {//FragmentPagerAdapter
//	private FragmentManager fm;
private ArrayList<Fragment> fragments = null;
private List<HotIssues> hotIssuesList;
private Context context;
public HomePageAdapter(Context context, FragmentManager fm, ArrayList<Fragment> fragments) {
super(fm);
this.context = context;
this.fragments = fragments;
notifyDataSetChanged();
}
public HomePageAdapter(Context context, FragmentManager fm, List<HotIssues> hotIssuesList) {
super(fm);
this.context = context;
this.hotIssuesList = hotIssuesList;
notifyDataSetChanged();
//this.fragments = fragments;
}
@Override
public Fragment getItem(int arg0) {
//Fragment fragment = new ColourFragment();
//Bundle args = new Bundle();
//args.putInt("title", arg0);
//args.putSerializable("content",hotIssuesList.get(arg0));
//fragment.setArguments(args);
//return fragment;
return fragments.get(arg0);
}
@Override
public int getItemPosition(Object object) {
// TODO Auto-generated method stub
return PagerAdapter.POSITION_NONE;
}
@Override
public int getCount() {
return fragments.size();//hotIssuesList.size();
}
}


注:引用stackoverflow牛人的解决说明:

The ViewPager doesn't remove your fragments with the code above because it loads several views (or fragments in your case) into memory. In addition to the visible view, it also loads the view to either side of the visible one. This provides the smooth scrolling
from view to view that makes the ViewPager so cool.

To achieve the effect you want, you need to do a couple of things.

Change the FragmentPagerAdapter to a FragmentStatePagerAdapter. The reason for this is that the FragmentPagerAdapter will keep all the views that it loads into memory forever. Where the FragmentStatePagerAdapter disposes of views that fall outside the current
and traversable views.

Override the adapter method getItemPosition (shown below). When we call mAdapter.notifyDataSetChanged(); the ViewPager interrogates the adapter to determine what has changed in terms of positioning. We use this method to say that everything has changed so
reprocess all your view positioning。

大致意思是说:viewpager在加载当前页的时候已经将pager页左右页的内容加载进内存里了,这样才保证了viewpager左右滑动的时候的流畅性;

为了解决彻底删除fragment,我们要做的是:

1.将FragmentPagerAdapter 替换成FragmentStatePagerAdapter,因为前者只要加载过,fragment中的视图就一直在内存中,在这个过程中无论你怎么刷新,清除都是无用的,直至程序退出; 后者 可以满足我们的需求。

2.我们可以重写Adapter的方法--getItemPosition(),让其返回PagerAdapter.POSITION_NONE即可。

以下为引用内容:
@Override
public int getItemPosition(Object object) {
// TODO Auto-generated method stub
return PagerAdapter.POSITION_NONE;
}


到这一步我们就可以真正的实现随意、彻底删除viewpager中的fragment,随意添加。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: