在Fragment中嵌套ViewPager时应该使用getChildFragmentManager(),而不是getFragmentManager();
getFragmentManager()所得到的是所在fragment 的父容器的管理器,
getChildFragmentManager()所得到的是在fragment 里面子容器的管理器。
最近在写项目时,采用的是单Activity+多Fragment的架构,用的Fragmentation的库。我的主页面是一个BootomFragment的抽象类(当然它还有一个管理类),其又继承自最大的LatteDelegate,LatteDelegate又继承自Fragment并实现Fragmentation库的接口,当然,当然这只是其中一部分,所以简略的讲了一下,大概知道层次就行。
别的功能例如主界面,个人中心等等继承自其BootomFragment,并在BootomFragment抽象类里重写了返回事件方法,为了双击返回效果。
结果就是从主页面start到item详细信息时,当我再次返回时,我的双击返回事件居然失效了。
查其原因是因为我的item详细界面中嵌套了Viewpager,而我在设置FragmentStatePagerAdapter时,传入的是getFragmentManager()。导致我的事务直接被退,也就是我的BootomFragment成了一个新的Fragment,导致我重写的返回方法直接失效。这时候当再次点返回键,就成为了Fragmentation库默认的返回方法,也就是根据栈内Fragment,逐一退栈。
private void initPager(JSONObject data) { final PagerAdapter adapter = new TabPagerAdapter(getChildFragmentManager(), data); mViewPager.setAdapter(adapter); }
修复之后