转自:http://www.desteps.com/mobile/android/0101093.html
Android Viewpager动态添加、动态删除Fragment解析。android viewpager、viewpager动态添加、viewpager动态删除。
viewpager嵌套fragment是一个比较帅气的使用,但是问题多多,毕竟没怎么用过。之前viewpager的使用顶多是在应用开始的介绍页,viewpager内嵌几张介绍图片,其实这个使用是比较常规的;假如嵌套布局搞的复杂点,如自定义view/fragment,那么就要考虑下布局资源的分发情况了,而不是简单的对Adapter或者pager进行clear、removeAllViews。
拿自己的项目使用情况来说,开始以为viewpager的页数是定的,但最后才知道是动态改变的,不仅可以增加,还要动态的删除!!!这个实时动作真的很折腾,增加是没有问题的,但是减少却不如我们所愿,总是有残留的布局在占着位子,挥之不去,无论你怎么clear、remove都于是无补,因为我不懂它的实现机制,so,真心被动。折腾了好几天,终于在stackoverflow上找到了问题的根源,结合自己项目实际情况解决了自己的问题。
所以说:软件开发有两种东西是不可或缺的:1.勇于尝试;2.良好的英文阅读能力!!
项目使用情况:viewpager+FragmentPagerAdapter+fragment,交互逻辑放置在fragment中;
1、主activity中的动态动态增删逻辑,因为涉及到动态 刷新,所以在每次动态添加之前要先将其清空一下
以下为引用内容: layout.removeAllViews();//涉及到实时刷新,所以要将之前的布局清空掉。 homePager.removeAllViewsInLayout();//removeAllViews();//赋值之前先将Adapter中的 homepageFragments.clear(); if(hotIssuesList != null && hotIssuesList.size()>0) { describeArr = new String[hotIssuesList.size()]; solutionArr = new String[hotIssuesList.size()]; for(int i = 0; i < hotIssuesList.size(); i++) {//hotIssuesList.size() describeArr[i] = hotIssuesList.get(i).getHotDescirbe();//提取对应pager数据源。 solutionArr[i] = hotIssuesList.get(i).getHotSolution(); img = new ImageView(this);//准备5个小图标。 img.setScaleType(ScaleType.FIT_XY); img.setImageResource(img_ID); imgsList.add(img); img.setPadding(6, 3, 6, 3); layout.addView(img, params); //colourFragment = new ColourFragment(hotIssuesList.get(i)); //homepageFragments.add(colourFragment); //homePage2Fragment = new HomePage2Fragment(this, i, hotIssuesList.get(i)); homePage2Fragment = HomePage2Fragment.getInstance(hotIssuesList.get(i)); //homePage2Fragment = new HomePage2Fragment(this, i, new String[]{describeArr[i], solutionArr[i]}); homepageFragments.add(homePage2Fragment); //viewpagerItemView = new ViewPagerItemView(this, i, new String[]{describeArr[i], solutionArr[i]}); //homepageViews.add(viewpagerItemView); } //custom-viewpager // MyHomePagerAdapter myAdapter = new MyHomePagerAdapter(this, homepageViews, describeArr, solutionArr); HomePageAdapter adapter = new HomePageAdapter(this, getSupportFragmentManager(), homepageFragments); homePager.setAdapter(adapter); //wrapper-viewpager- // HomePageAdapter adapter = new HomePageAdapter(this, getSupportFragmentManager(), hotIssuesList); // PagerAdapter wrappedAdapter = new InfinitePagerAdapter(adapter); // homePager.setAdapter(wrappedAdapter); homePager.setCurrentItem(0); imgsList.get(0).setImageResource(img_ID_ov); homePager.setOnPageChangeListener(new PageListener()); }