Viewpager动态添加删除Fragment
来源:互联网 发布:域名价格排行榜 编辑:程序博客网 时间:2024/05/18 11:24
之前一个项目有个需求是浏览图片,然后用到ViewPager,然后觉得没什么的,就按照ViewPager的标准写好,但是后来需要改动(你懂的),浏览自己的图片需要加上动态添加和删除!好吧,我加,但是问题来了,我在把ViewPager的数据源删了或者添加,然后调用adapter.notifyDataSetChanged(),撒用都没有。
百度了,也没有好点的解决方法,抓狂下,最终还是问了同组的大神,他鄙视的跟我说,其实就是改adapter一个方法就好!膜拜ing。。。。。。
下面是主要的主要代码
public class ViewPagerAdapter extends FragmentStatePagerAdapter { private List<Fragment> fragments = null; private Context context; public ViewPagerAdapter(Context context, FragmentManager fm, List<Fragment> fragments) { super(fm); this.context = context; this.fragments = fragments; notifyDataSetChanged(); } public ViewPagerAdapter(Context context, FragmentManager fm) { super(fm); this.context = context; notifyDataSetChanged(); } @Override public Fragment getItem(int arg0) { 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(); }}
以下是Activty的代码
public class ViewPagerActivity extends GBaseActivity { private static final String TAG = "ViewPagerActivity"; private ViewPagerAdapter adapter; private ViewPager view_pager; private RelativeLayout rl_top; private TextView delete; private TextView title; private TextView add; List<Fragment> fragmentList = new ArrayList<>(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_view_pager); initView(); } private void initView() { view_pager = (ViewPager)findViewById(R.id.view_pager); rl_top = (RelativeLayout) findViewById(R.id.rl_top); delete = (TextView) findViewById(R.id.delete); title = (TextView) findViewById(R.id.title); add = (TextView) findViewById(R.id.add); initFragment(); adapter = new ViewPagerAdapter(this,getSupportFragmentManager(),fragmentList); view_pager.setAdapter(adapter); view_pager.setCurrentItem(0); title.setText("标题" +0); view_pager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } @Override public void onPageSelected(int position) { title.setText("标题" + position); } @Override public void onPageScrollStateChanged(int state) { } }); add.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { ImageFragment fragment = new ImageFragment(ViewPagerActivity.this,"http://f.hiphotos.baidu.com/image/h%3D360/sign=9a7ed298271f95cab9f594b0f9167fc5/72f082025aafa40f468f193ba964034f79f0198e.jpg",fragmentList.size()); fragmentList.add(fragment); adapter.notifyDataSetChanged(); } }); delete.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if(fragmentList.size()> 1){ fragmentList.remove(view_pager.getCurrentItem()); adapter.notifyDataSetChanged(); } } }); } private void initFragment() { for (int i = 0; i < 4; i++) { ImageFragment fragment = new ImageFragment(this,"http://f.hiphotos.baidu.com/image/h%3D360/sign=9a7ed298271f95cab9f594b0f9167fc5/72f082025aafa40f468f193ba964034f79f0198e.jpg",i); fragmentList.add(fragment); } }}
代码是demo来的,其他就不贴了,功能实现了,xml的可以自己配一下,测了一下,行了!!后来查看的原理,
1.将FragmentPagerAdapter 替换成FragmentStatePagerAdapter,因为前者只要加载过,fragment中的视图就一直在内存中,在这个过程中无论你怎么刷新,清除都是无用的,直至程序退出; 后者 可以满足我们的需求。
2.我们可以重写Adapter的方法–getItemPosition(),让其返回PagerAdapter.POSITION_NONE即可。
希望可以帮到大家,大神或者重复了勿喷!!!欢迎留言
0 0
- Viewpager动态添加删除Fragment
- viewpager+fragment 动态添加删除
- viewpager+fragment 动态添加删除
- viewpager中彻底性动态添加、删除Fragment
- viewpager中动态添加、删除Fragment
- viewpager中彻底性动态添加、删除Fragment
- viewpager中彻底性动态添加、删除Fragment
- viewpager中彻底性动态添加、删除Fragment
- viewpager中彻底性动态添加、删除Fragment
- Android中使用ViewPager+Fragment动态删除添加Fragment问题
- ViewPager 动态删除Fragment
- ViewPager Fragment动态添加以及动态删除的理解
- 动态修改viewpager里面的fragment(添加和删除)
- ViewPager+Fragmnet组合动态添加和删除Fragment
- ViewPager+Fragment实现TabHost,Fragment动态添加、删除,Tab选项卡跟随滑动
- ViewPager+Fragment实现Tabhost,动态添加删除Fragment,可供第三方使用的类库
- ViewPager中添加和删除Fragment
- Android Viewpager动态删除Fragment解析
- 18. Comparable 与Comparator区别
- C# 第一个窗体的数据传递到第二个窗体上应用
- android布局属性大全
- Linux下的shell
- 假定已经获取题库中的试题号抽取n题组成考题字符串
- Viewpager动态添加删除Fragment
- 29. Divide Two Integers
- HDU 4452 Running Rabbits [模拟]
- jquery动态创建json
- 前台html和后台cs代码分离情况下的,控件对应声明
- HTML5 - Voide标签
- ListView 去除黄色背景
- 深入理解Java虚拟机笔记---内存分配与回收策略
- 《有效写作十三篇》读书笔记