1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > Android ViewPager嵌套ViewPager+Fragment问题

Android ViewPager嵌套ViewPager+Fragment问题

时间:2023-09-17 04:20:37

相关推荐

Android ViewPager嵌套ViewPager+Fragment问题

最近在项目中又遇到了ViewPager互相嵌套的问题,代码实现很简单,主要可能出现的问题是子ViewPager的fragment滑动出现白屏,这个问题的出现是FragmentManager方法调用错误,android中涉及到FragmentManager的方法主要有:getChildFragmentManager()、getFragmentManager()和getSupportFragmentManager(),下面分别介绍三种方法的区别

1.getChildFragmentManager()方法

官方文档说明如下

Return a private FragmentManager for placing and managing Fragments inside of this Fragment.

返回一个FragmentManger为了管理和设置当前Fragment内部的Fragment们,比如上文所说的,外层ViewPager(父ViewPager)中的Fragment(父Fragment)嵌套内层ViewPager(子ViewPager)+内层Fragment(子Fragment),子Fragment的FragmentManager的获取方法就需要调用getChildFragmentManager()方法。

2.getFragmentManager()方法

官方说明如下

Return the FragmentManager for interacting with fragments associatedwith this fragment's activity.

返回一个FragmentManager为了与当前Activity内部的Fragment们进行交互,因为3.0以后才有Fragment控件,所以该方法适用于3.0以后的系统,父控件为Activity的情况。

3.getSupportFragmentManager()方法

官方说明如下

Return the FragmentManager for interacting with fragments associatedwith this activity.

方法介绍和getFragmentManager()方法相同,区别是该方法位于FragmentActivity内。因为Fragment是3.0以后才出现的组件,为了这之前的系统版本也能使用Fragment,借助V4包里面的getSupportFragmentManager()方法来间接获取FragmentManager对象。

方法总结,需要管理相互独立且隶属于Activity/FragmentActivity的Fragment使用getFragmentManager()/getSupportFragmentManager(),而在Fragment中添加Fragment要使用getChildFragmetManager()来管理。

4.关于ViewPager Adapter的说明

在我们调用ViewPager的Adapter可继承的类有PagerAdapter、FragmentPagerAdapter和FragmentStatePagerAdapter,后两个都是PagerAdapter的子类。

FragmentPagerAdapter 继承自 PagerAdapter。相比通用的 PagerAdapter,该类更专注于每一页均为 Fragment 的情况。如文档所述,该类内的每一个生成的 Fragment 都将保存在内存之中,因此适用于那些相对静态的页,数量也比较少的那种;如果需要处理有很多页,并且数据动态性较大、占用内存较多的情况,应该使用FragmentStatePagerAdapter。

FragmentStatePagerAdapter 和前面的 FragmentPagerAdapter 一样,是继承子 PagerAdapter。但是,和 FragmentPagerAdapter 不一样的是,正如其类名中的 ‘State’ 所表明的含义一样,该 PagerAdapter 的实现将只保留当前页面,当页面离开视线后,就会被消除,释放其资源;而在页面需要显示时,生成新的页面(就像 ListView 的实现一样)。这么实现的好处就是当拥有大量的页面时,不必在内存中占用大量的内存。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。