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

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适应更多机型。 
它俩在使用上也是有区别的: 
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 FragmentActivity

FragmentManager fm=getSupportFragmentManager();

等。。

以后我都不再用app包了

这个是v4包与app包的区别与选择https://www.cnblogs.com/as3lib/p/6129313.html

这个是很详细的一篇

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

http://blog.csdn.net/it_zjyang/article/details/51584439
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值