谷歌电子市场开发记录(2)-框架搭建
来源:互联网 发布:淘宝二手笔记本怎么样 编辑:程序博客网 时间:2024/06/08 00:43
这种pager十分适用于有一些静态fragment,例如一组tabs,的时候使用。每个页面对应的Fragment当用户可以访问的时候会一直存在内存中,但是,当这个页面不可见的时候,view hierarchy将会被销毁。这样子会导致应用程序占有太多资源。当页面数量比较大的时候,建议使用 FragmentStatePagerAdapter。
当使用FragmentPagerAdapter的时候,ViewPager一定要使用正确的ID set。
FragmentPagerAdapter的子类只要实现 getItem(int) 和 getCount()方法。
由此我们可以认定,在此种情况下,选用FragmentPagerAdapter是最好,那么问题就来了,在getItem()方法中需要返回一个Fragment对象,而此处又有多个页面,需要多个Fragment,该返回哪个fragment呢?
这里有几个解决办法,第一种就是使用HashMap将每个初始化后的Fragment对象存储起来,然后再通过hashmap.get(pos)得到相应的Fragment;第二种就是使用工厂设计模式,生产出一个一个的Fragment。现在考虑这两种方法的优劣:
第一种方法需要在开始时就要初始化所有的Fragment,但是我们想要的却是当ViewPager滑到哪一个页面,哪一个Fragment才被初始化,这样会大大节省内存,而第二种方法就解决了这个问题。
我们可以创建一个BaseFragment作为每一个页面的基类,因为这几个页面有相似之处,可以在基类就显示出(相似之处在后面会提到),在工厂类中可以根据ViewPager的位置来选择初始化何种界面。
public class FragmentFactroy { private static HashMap<Integer,BaseFragment> hashMapfragment=new HashMap<Integer,BaseFragment>(); public static BaseFragment createFragment(int pos){ BaseFragment baseFragment=hashMapfragment.get(pos); if (baseFragment==null){ switch (pos){ case 0: baseFragment=new HomeFragment(); break; case 1: baseFragment=new AppFragment(); break; case 2: baseFragment=new GameFragment(); break; case 3: baseFragment=new SubjectFragment(); break; case 4: baseFragment=new RecommendFragment(); break; case 5: baseFragment=new CategoryFragment(); break; case 6: baseFragment=new HotFragment(); break; default: break; } } hashMapfragment.put(pos,baseFragment); return baseFragment; }}
- 谷歌电子市场开发记录(2)-框架搭建
- 谷歌电子市场开发记录(1)-开发前的准备
- 谷歌电子市场开发流程(6)-xutils的使用
- 谷歌电子市场开发流程(7)-单例模式
- 谷歌电子市场开发流程(6)-xutils的使用
- 谷歌电子市场开发流程(8)-自定义控件
- 谷歌电子市场开发流程(9)-线程,线程池
- 谷歌电子市场笔记2
- 谷歌电子市场第2天
- 谷歌电子市场
- 谷歌电子市场开发流程(3)-关于加载界面的处理
- 谷歌电子市场开发流程(4)-listview的两层封装
- 谷歌电子市场开发流程(5)-关于加载更多页面的处理
- 谷歌电子市场开发流程(10)-回调与观察者模式
- 谷歌电子市场笔记1
- 谷歌电子市场笔记3
- 谷歌电子市场笔记4
- 谷歌电子市场笔记5
- linux下codeblockes多线程编译配置
- redis分布式锁
- (OK) MIMP
- [Loj]#6004. 「网络流 24 题」圆桌聚餐
- java入门学习01
- 谷歌电子市场开发记录(2)-框架搭建
- Spring中整合mybatis
- nodejs http simple demo
- 使用反射遍历类的属性
- SQL 实现行转列
- 括号匹配
- mysql实现sql记录
- UIVIEW切任意角
- python3使用builtwith 出错的最简单处理方法