Android - Fragment 内嵌 ViewPager ,ViewPager各个页面使用Fragment第二次进入空白界面
2017-04-11 11:23
736 查看
唠叨
标题好长啊,我也不想啊,为了你们,我只能这么写这么长,描述清楚问题嘛!再说一遍问题 :
Fragment内嵌
ViewPager, 而
ViewPager各个页面使用
Fragment实现,第一次进入没问题,第二次及其以后的进入前两页空白,什么都没有!
因为之前从没有做过多
Fragment嵌套,之前开发都是 单
Activity- 单
Fragment实现,这次改变了开发思路,因为是小应用,就想着使用 单
Activity- 多
Fragment实现,没想到在
Fragment中使用
ViewPager的时候,会出现空白问题,查了好多说是
ViewPagerAdapter重新实例化了,但我想了,这每次进入肯定要实例化啊,因为重新进入了啊!后就那个纠结啊,还有人说使用
getChildFragmentManager() ,但是当时我的
Adapter使用的是
FragmentStatePagerAdapter这就尴尬了,居然报下面错误:
java.lang.NullPointerException: Attempt to invoke virtual method 'int java.util.ArrayList.size()' on a null object reference at android.support.v4.app.FragmentManagerImpl.getFragment(FragmentManager.java:667) at android.support.v4.app.FragmentStatePagerAdapter.restoreState(FragmentStatePagerAdapter.java:211) at android.support.v4.view.ViewPager.onRestoreInstanceState(ViewPager.java:1319) at android.view.View.dispatchRestoreInstanceState(View.java:13795) at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:3016) ....
不开心了,明明
FragmentStatePagerAdapter到头来居然使用不了!
当然你可以看下面文章学习使用
FragmentStatePagerAdapter:
Android-ViewPager(FragmentPagerAdapter 和 FragmentStatePagerAdapter
最后改成
FragmentPagerAdapter才正常,下面总结下。
描述问题
Fragment内嵌
ViewPager, 而
ViewPager各个页面使用
Fragment实现,第一次进入没问题,第二次及其以后的进入前两页空白,什么都没有!
当时我的实现是:
Fragment初始化
adapter使用的是
getFragmentManager()
ViewPager的
adapter是
FragmentStatePagerAdapter
比如: 下面是我错误的实现
ContentFragment
managePageAdapter = new ManagePageAdapter(getFragmentManager(),fragments);
ManagePageAdapter
public class ManagePageAdapter extends FragmentStatePagerAdapter {}
解决
来张很烂的图,说明几个内容的关系:所有的
Fragment都继承自
BaseFragment
ContentFragment内嵌
ViewPager
ViewPager的每个页面使用的是
ListFragment实现
少画了一层:
ContentFragment在
Activity中被
commit
解决方案就是 如图所示:
ViewPager的
Adapter使用
FragmentPageAdapter实现
在
ContentFragment中初始化
ViewPagerAdapter的时候使用`getChildFragmentManager()
比如 下面是正确的配置:
ContentFragment
managePageAdapter = new ManagePageAdapter(getChildFragmentManager(),fragments);
ViewPagerAdapter
public class ManagePageAdapter extends FragmentPagerAdapter{}
问题探究
如果在宿主Fragment中使用
getFragmentManager()初始化
Adapter的时候,会将宿主
Fragment中
Viewpager中的子
Fragment添加到宿主的
FragmentManager;
看图:
ContentFragment中使用
getFragmentManager()其实就是
Activity中的
FragmentManager
比如 打印Activity中的FragmentManager会发现 Viewpager中的Fragment被加入其中,那么这就乱套了,这个实例在第一次加载的时候被加入,所以第一次正常显示,后面的因为存在了实例未被销毁,所以在第二次及其后面的显示中,就没有再次被加入,除非它被销毁或移除才可以。
V/WorkActivity: FragmentManager >> 3 V/WorkActivity: >> ManageFragment{2de85921 #0 id=0x7f0e0080} V/WorkActivity: >> ManageListFragment{279c3146 #1 id=0x7f0e009d android:switcher:2131624093:0} V/WorkActivity: >> ManageListFragment{16a87f07 #2 id=0x7f0e009d android:switcher:2131624093:1}
知道了原因,就使用 分而治之 策略,在
Viewpager中的子
Fragment使用
ContentFragment中的
ChildFragmentManager来管理,各管各的就可以了。
如图 :
ContentFragment使用
getChildFragmentManager()获取 子
FramgetManager
分而治之 ,各管各的内容
完
相关文章推荐
- 【Android UI设计与开发】第02期:引导界面(二)使用ViewPager实现欢迎引导页面
- 【Android UI设计与开发】第02期:引导界面(二)使用ViewPager实现欢迎引导页面
- 【Android UI设计与开发】第02期:引导界面(二)使用ViewPager实现欢迎引导页面
- Android实践-使用ViewPager和Fragment实现带Tab导航条的仿新闻类页面
- 使用ViewPager设置适配器FragmentPagerAdapter出现页面空白的问题
- 解决Android开发中ViewPager动态设置PagerAdapter时第二次进入Fragment内容不显示的问题
- 【Android UI设计与开发】第02期:引导界面(二)使用ViewPager实现欢迎引导页面
- Android使用Fragment来实现ViewPager的功能(解决切换Fragment状态不保存)以及各个Fragment之间的通信
- Android仿微信界面--使用FragmentPagerAdapter,viewpager实现(慕课网笔记)
- 【Android UI设计与开发】第02期:引导界面(二)使用ViewPager实现欢迎引导页面
- Android使用Fragment来实现ViewPager的功能(解决切换Fragment状态不保存)以及各个Fragment之间的通信
- 【Android UI设计与开发】第02期:引导界面(二)使用ViewPager实现欢迎引导页面
- 【Android 界面效果27】利用ViewPager、Fragment、PagerTabStrip实现多页面滑动效果
- 【转】Android使用Fragment来实现ViewPager的功能(解决切换Fragment状态不保存)以及各个Fragment之间的通信
- 【Android UI设计与开发】2.引导界面(二)使用ViewPager实现欢迎引导页面
- 【Android UI设计与开发】第02期:引导界面(二)使用ViewPager实现欢迎引导页面
- 【Android UI设计与开发】2.引导界面(二)使用ViewPager实现欢迎引导页面
- 【Android UI设计与开发】第02期:引导界面(二)使用ViewPager实现欢迎引导页面
- 【Android UI设计与开发】第02期:引导界面(二)使用ViewPager实现欢迎引导页面
- ViewPager+Fragment第二次进入显示空白