#
Android中Fragment嵌套ViewPager,ViewPager嵌套Fragment导致二次进入时没有数据
作者:燕潇洒
导读:在项目中使用Fragment嵌套ViewPager,而ViewPager还要嵌套Fragment,一开始还没有出现问题,可是到二次刷新时,发现最内层的Fragment没有数据了,很郁闷,经过百度,在这个人的博客内发现了解决方法;
解决方式:
可以参考上面给的链接,作者只说了两句话:
解决:
在传递pagerAdapter 的参数中使用:
已经解决了。用新的V4包中的getChildFragmentManager就可以了
于是就搜索这个方法,明白了解决方式,在使用ViewPgaer嵌套Fragment的时候,。需要设置Adapter,在构造函数中,我们需要传入一个FragmentManager对象,正常情况下,要传getFragmentManager();方法就可以。这是没有出现Fragment数据丢失的情况,现在出现了这个情况,博客博主使用getChildFragmentManager();解决了他遇到的问题。
我们来看一下getChildFragmentManager();源码
/**
* Return a private FragmentManager for placing and managing Fragments
* inside of this Fragment.
*/
final public FragmentManager getChildFragmentManager() {
if (mChildFragmentManager == null) {
instantiateChildFragmentManager();
if (mState >= RESUMED) {
mChildFragmentManager.dispatchResume();
} else if (mState >= STARTED) {
mChildFragmentManager.dispatchStart();
} else if (mState >= ACTIVITY_CREATED) {
mChildFragmentManager.dispatchActivityCreated();
} else if (mState >= CREATED) {
mChildFragmentManager.dispatchCreate();
}
}
return mChildFragmentManager;
}
注释的大致意思:
返回一个专用的FragmentManager,用于放置和管理内容。
android官方对它的解释是,返回一个FragmentManager为了设置和管理当前Fragment内部的Fragment的们。举个例子,在Fragment布局中添加了一个Fragment容器,目的是在Fragment执行的过程中动态的添加一个Fragment,并且对他进行操作。
而getFragmentManager();的方法解释:
是为了获取能管理和当前Activity有关联的Fragment的FragmentManager
总结:
需要管理相互独立的并且隶属于Activity的Fragment使用FragmentManager(),而在Fragment中动态的添加Fragment要使用getChildFragmetManager()来管理!