在Viewpager中的一个Fragment中添加一个ViewPager

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Viewpager中的一个Fragment中添加一个ViewPager相关的知识,希望对你有一定的参考价值。

参考技术A 在现在很多的应用程序中都会用到ViewPager嵌套ViewPager的情况,比如掌上英雄联盟。

如图,下面的四个按钮是控制一个ViewPager,在使用到ViewPager嵌套ViewPager的时候,外层的ViewPager必须设置不能滑动,以免造成两个ViewPager产生冲突,在这里的第一个Fragment中也用到了一个ViewPager,并结合TabLayout实现一个ViewPager的使用。我们来详细介绍这一个Fragment中的ViewPager。

tabIndicatorHeight是设置TabLayout下的标志线的大小,在设置为0dp,是为了隐藏标志线。tabMode是设置tablayout是固定或是滑动的,fixed为固定,scrollable为可以滑动。app:tabGravity="fill"设置布满。tabSelectedTextColor设置tab选中文字的颜色,tabTextColor设置tab为选中的颜色。

为ViewPager设置适配器,ViewPager设置的是FragmentPagerAdapter,并重写getItem(),getCount(),getPageTitle()这三个方法。mTablayout.setupWithViewPager(mViewPager);将tablayout与viewpager关联在一起。
为tablayout设置OnTabSelectedListener和为viewpager设置OnPageChangeListener。
在这里要特别说明的是mViewPager.setAdapter(new FragmentPagerAdapter(getChildFragmentManager()) 中需要用到的是getChildFragmentManager(),而不是getSupportFragmentManager。
设置为getSupportFragmentManager()的时候,在外面的viewpager滑动后里面的viewpager就显示不了。

Fragment中的ViewPager的Fragment添加子Fragment要放在onAttach中添加

我的一个Fragment,里面通过ViewPager包含有N多个子FragmentB,每个子Fragment里面又通过

childFragmentManager.beginTransaction().replace(R.id.frameLayout,fragment!!).commitAllowingStateLoss()添加了子FragmentC原来我是将添加子Fragment的代码放在onViewCreated中的,开始没问题,但当来回切换ViewPager几次后发现,通过FragmentB中拿到的FragmentC的句柄来调用FragmentC里面的代码时,发现一系列问题:各种值为空,并提示FragmentC not attached yet 。

折腾了一个通宵,最后试验发现在FragmentB的onAttach里面再去做添加FragmentC的操作一切都正常了。

以上是关于在Viewpager中的一个Fragment中添加一个ViewPager的主要内容,如果未能解决你的问题,请参考以下文章

android ViewPager+Fragment 如何在ViewPager的Activity中获取Fragment中的控件对象

ViewPager+Fragment取消预加载(延迟加载)

ViewPager 内的 Fragment 中的 EditText 焦点上的视图混淆了

在 viewpager 中获取当前 Fragment 实例

如何从 MainActivity 中的 Fragment 访问适配器?我正在使用带有 viewpager 的标签,所以没有交易等方法

ViewPager+Fragment取消预加载(延迟加载)(转)