您的位置:首页 > 移动开发

Fragment与ViewPager的结合做出局部滑动刷新页面,以及关于app.FragmentManager和v4包的FragmentPagerAdapter冲突

2018-03-22 00:15 585 查看
ViewPager+Fragment可以做出多页面滑动效果,让我们的应用程序界面操作起来更加灵活
一.首先来说说Fragment
不了解的进这里https://www.cnblogs.com/guop/p/5072572.html
支持Fragment的有两个包
import android.support.v4.app.Fragment;
import android.app.Fragment;
fragment有android.support.v4.app.fragment包和android.app.fragment之分,它俩的区别在于: 
android.app.fragment包是是3.0以后的系统才能使用的,也就是说3.0以前的系统是没法体验到这个包的功能。 
而android.support.v4.app.fragment包是为了向下兼容,使低版本(到1.6版本)也能体验到fragment的功能。 
推荐使用v4包下的,这样可以使APP适应更多机型。 
它俩在使用上也是有区别的: 
a067

1.首先一点是在管理fragment的主activity上, app包下的照样继承Activity,但是v4包下的需要继承FragmentActivity, 
2.对FragmentManager的获取,在app包下需要使用getFragmentManager(),如下:
FragmentMagnager fm=getFragmentManager();
1
在v4包下需要使用getSupportFragmentManager()来获取管理,代码如下:
FragmentMagnager fm=getSupportFragmentManager();
1
3.我们把用来显示特定的fragment的动作称之为事务,事务通过FragmentTransaction来执行,用以下方法对FragmentTransaction进行实例化:
FragmentTransaction transaction=fragmentManager.beginTransaction();
1
然而v4包与app包的区别在于,v4包必须事务添加完fragment后加上commit();顾名思义,commit是提交的意思,我们对事务添加的所有动作最后都要提交,即添加完事务的最后一定要执行transaction.commit();不然会导致异常。

我建议大家使用v4包。

二.再来说说ViewPager
ViewPager是个功能非常强大的UI组件,应用非常的广泛,用于页面的滑动。
不了解的进这里http://www.imooc.com/article/2580

使用ViewPager的步骤:
1.现在布局文件中添加ViewPager
<android.support.v4.view.ViewPager
android:id="@+id/viewPager"
android:layout_width="wrap_content"
android:layout_height="440sp">
</android.support.v4.view.ViewPager>2.创建适配器,得继承PagerAdapter
3.Activity文件中根据id获取ViewPager
获取你需要滑动的View
创建List<View> list,并将你的View放入list,然后与实例化你的适配器,并与ViewPager配置好
三.ViewPager与Fragment
在实际的开发中,这两者的组合是使用比较常见的,对于Fragment,使用的适配器是FragmentStatePagerAdapter或者FragmentPagerAdapter,两者的区别http://blog.csdn.net/hknock/article/details/46741573
主要说一下这个坑:
有次用getFragmentManager()得到FragmentManager不能放到FragmentPagerAdapter里面去.因为FragmentPagerAdapter里面构造参数必须是v4包下的FragmentManager,而我activty里面getFragmentManager得到是app包下的FragmentManager 产生冲突 。

那问题总结下:因为是最低版本4.3所以我用到fragment时候不想用fragmentactivity 直接用actiity多方便定义基类也方便多了.问题是fragment的FragmentPagerAdapter适配器默认需要传一个参数必须是v4包的FragmentManager,而我用的activity得到的FragmentManager是app包下的这下凌乱.而发现app包下根本没有FragmentPagerAdapter..真是差点没骂谷歌脑残..解决方法 直接去v4报下找到FragmentPagerAdapter源码把他全部复制下来自己建立一个类,把里面所有导入FragmentManager的改成app包下的 这样就解决了,,最后还是不相信谷歌有这么脑残,终于找到在v13包下的FragmentPagerAdapter 这个类用到FragmentManager是app包下的FragmentManager,那就把v13包倒进来就可以轻松使用actvity类来得到FragmentManager实现 ,万一你觉得用v13包只用了这么一个类浪费 那就直接把v13包的FragmentPagerAdapter拉下来复制一份就省略了而我在导入v13包后,莫名其妙R爆红,v13似乎不太靠谱。最终我自个的解决方法就是把app包换成的v4包用,几个地方改一改MainActivity extends FragmentActivityFragmentManager fm=getSupportFragmentManager();等。。
以后我都不再用app包了
这个是v4包与app包的区别与选择https://www.cnblogs.com/as3lib/p/6129313.html

这个是很详细的一篇

教你如何使用ViewPager+Fragment一步步打造顶部导航界面滑动效果

http://blog.csdn.net/it_zjyang/article/details/51584439
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: