关于fragment滑动的记录
来源:互联网 发布:dlp mac 编辑:程序博客网 时间:2024/06/18 16:37
FragmentPagerAdapter是Android-support-v4支持包里面出现的一个新的适配器,继承自PagerAdapter,是专门用来给支持包中出现的ViewPager进行数据适配的。
PagerAdapter在之前的文章中进行过简单的介绍,不记得怎么使用的可以先去看一下。
FragmentPagerAdapter,见名知意,这个适配器就是用来实现Fragment在ViewPager里面进行滑动切换的,因此,如果我们想实现Fragment的左右滑动,可以选择ViewPager和FragmentPagerAdapter实现。
FragmentPagerAdapter拥有自己的缓存策略,当和ViewPager配合使用的时候,会缓存当前Fragment以及左边一个、右边一个,一共三个Fragment对象。
假如有三个Fragment,那么在ViewPager初始化之后,3个fragment都会加载完成,中间的Fragment在整个生命周期里面只会加载一次,当最左边的Fragment处于显示状态,最右边的Fragment由于超出缓存范围,会被销毁,当再次滑到中间的Fragment的时候,最右边的Fragment会被再次初始化。
在当前版本来说,最适合用来做固定的较少数量的场合,比如说一个有3个tab标签的fragment滑动界面。FragmentPagerAdapter会对我们浏览过Fragment进行缓存,保存这些界面的临时状态,这样当我们左右滑动的时候,界面切换更加的流畅。但是,这样也会增加程序占用的内存。如果应用场景是更多的Fragment,请使用FragmentStatePagerAdapter。
当我们使用FragmentPagerAdapter的时候,它的宿主ViewPager必须有一个id。
如果要使用FragmentPagerAdapter,我们需要实现2个方法,如下所示。
- FragmentPagerAdapter adapter = new FragmentPagerAdapter(
- getSupportFragmentManager()) {
- @Override
- public int getCount() {
- return fragments.size();
- }
- @Override
- public Fragment getItem(int position) {
- return fragments.get(position);
- }
- }
- };
fragmentCitiaoFav = new FragmentCitiaoFav();//FragmentfragmentpicFav = new FragmentpicFav();//第二個FragmentfragList_home.add(fragmentCitiaoFav); //fragList_home.add(fragmentpicFav);//添加adapterViewPagerforshoucang.bindData(fragList_home);//放進adapter,繼承FragmentStatePagerAdapte//可以自動緩存
在adapter中有个geiitem的方法,把fragment取出来
@Overridepublic Fragment getItem(int position) { return list.get(position);}
平常使用的FragmentPagerAdapter和FragmentStatePagerAdapter来自android.support.v4.app包用来构建ViewPager。
FragmentPagerAdapter更多的用于少量界面的ViewPager,比如Tab。划过的fragment会保存在内存中,尽管已经划过。而FragmentStatePagerAdapter和ListView有点类似,会保存当前界面,以及下一个界面和上一个界面(如果有),最多保存3个,其他会被销毁掉。
要注意的是FragmentStatePagerAdapter可能不经意间会造成内存未正常回收,严重导致内存溢出,比如图片资源没有释放,资源引用问题。(之前碰到过EditTextt由于保存焦点导致Fragment未被释放,以至于内存溢出,设置editText.saveEanble(false)就可以解决此问题)。
下面是viewpager的布局,用来滑动加载内容
<LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content"> <android.support.v4.view.ViewPager android:id="@+id/vp_home" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="7.05" android:background="@color/white" android:visibility="visible"></android.support.v4.view.ViewPager></LinearLayout>当点击切换时
rlArea.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { vpHome.setCurrentItem(0); tvArea.setTextColor(getResources().getColor(R.color.topTextColor)); tvTupian.setTextColor(getResources().getColor(R.color.black)); FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); transaction.show(fragList_home.get(0)); transaction.hide(fragList_home.get(1)); transaction.commit(); viewFriendsUnderline.setVisibility(View.VISIBLE); viewTvGuanzhuUnderline.setVisibility(View.GONE); }});
adapterViewPagerforshoucang = new AdapterViewPagerforshoucang(getSupportFragmentManager());fragList_home = new ArrayList<Fragment>();viewFriendsUnderline.setVisibility(View.VISIBLE);fragmentCitiaoFav = new FragmentCitiaoFav();//FragmentfragmentpicFav = new FragmentpicFav();//第二個FragmentfragList_home.add(fragmentCitiaoFav); //fragList_home.add(fragmentpicFav);//添加adapterViewPagerforshoucang.bindData(fragList_home);//放進adapter,繼承FragmentStatePagerAdapte//可以自動緩存initviewpglistener();vpHome.setAdapter(adapterViewPagerforshoucang);//viewpager展示
- 关于fragment滑动的记录
- 关于FragmentPager实现Fragment的滑动切换
- 关于Viewpager中的Fragment 滑动时保存状态的问题
- 记录ViewPage+Fragment嵌套ViewPage+Fragment滑动时内部嵌套卡顿的问题和实现Fragment的懒加载
- 关于viewpager中嵌套的fragment中的listview的横向滑动的滑动冲突的问题。
- 记录一次关于Activity与Fragment生命周期引起的异常
- Android的Fragment左右滑动
- Fragment做的导航滑动
- fragment的开发记录
- fragment的一些记录
- Android:关于Viewpager中的Fragment 滑动时保存状态的问题
- fragment滑动
- Fragment滑动
- Android--Fragment的使用(二)-滑动Fragment的使用
- 使用Fragment实现的滑动组件ViewPager
- ViewPager+Fragment 实现滑动页面的效果
- 实现Fragment滑动onFling的手势识别
- Viewpager+Fragment实现页面的滑动
- Android 切换日间夜间模式
- (转载)机器学习--Logistic回归-我看你像谁
- SAP HANA SQL获取上周的周一
- 更改SAP系统超时断线所允许的最大时间
- TortoiseSVN操作
- 关于fragment滑动的记录
- Ubuntu下常用的快捷键
- ORACLE之分组排序
- iOS 两级数据联动(UITableView)
- C#多线程扫描IP段和端口段.exe 小黄人软件定制
- SAP HANA日期函数总结
- 网站常见的反爬虫和应对方法
- WX-视图容器
- C#连接Oracle数据库(直接引用dll使用)