首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >使用Fragmentation,start跳转到嵌套viewpager页面出现返回键重写失效原因。

使用Fragmentation,start跳转到嵌套viewpager页面出现返回键重写失效原因。

作者头像
Petterp
发布于 2022-02-09 11:59:39
发布于 2022-02-09 11:59:39
5650
举报
文章被收录于专栏:JetPackJetPack

在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,逐一退栈。

代码语言:javascript
复制
   private void initPager(JSONObject data) {
        final PagerAdapter adapter = new TabPagerAdapter(getChildFragmentManager(), data);
        mViewPager.setAdapter(adapter);
    }

修复之后

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档