首页
学习
活动
专区
工具
TVP
发布

两步搞定Fragment返回键

本文来自我的简书博客:https://www.jianshu.com/p/fff1ef649fc0

Fragment可以说是在Android开发必需要使用到技术,项目中的界面基本上都是使用Fragment来实现,而Activity只是作为Fragment的载体,但有些特殊情况下Fragment也不得不处理Back键,如果是Activity的话还好说,直接覆盖 Activity的 即可,但Fragment可就没有这么幸运了,你可能和我一样,最开始有这样的需求的时候都会想去覆盖Fragment的方法,但是事与愿违,Fragment中并没有这样的方法,不仅如此,Fragment也没有更不可能有、这样的方法,那么Fragment如何处理back键成难题。

1、先定义一个 接口。

2、定义一个工具类,用于实现分发back事件,Fragment和Activity的外理逻辑是一样,所以两者都需要调用该类的方法。

3、当然 也要实现 接口(按需)

4、Activity覆盖方法(必须)

不是说好的两步么,这TM是4步啊!大哥不要生气,第一步和第二步我都给你做了,你只要在Gradle中加入以下的话以及第3、4步即可。你可以使用我提供的也可以让自己的实现FragmentBackHandler接口(只在需要Fragmen中实现就行),并在中用填入。

当你需要自己处理back事件时覆盖方法,如:

图示

Fragment的back键处理原理

图中红色部分为 或其它实现了 的Fragment。

back事件由下往上传递,当中间有未实现的Fragment作为其它Fragment的容器时,或该Fragment拦截了事件时,其子Fragment无法处理back事件。

有没有一种似曾相识的感觉?其实这和View的事件分发机制是一个道理。

原理

1、不管是也好,也好,其中内部包含的Fragment都是通过来管理的。

2、可以获取当前中处于活动状态的所有Fragment

3、事件由Activity交给当前Fragment处理,如果Fragment有子Fragment的情况同样可以处理。

这么做的好处

1、Activity不必实现接口,仅需在中调用即可,Fragment同理。

2、支持多个Fragment

3、支持Fragment嵌套

4、改动小,只修改有拦截back键需求的Fragment及其父Fragment,其它可以不动。

结语

本人不善言辞,也是第一次写博文,如有不对的地方请多指正,如果你有更好的办法请给我留言交流。

部分代码有删减,完整版请见Github:FragmentBackHandler

(https://github.com/ikidou/FragmentBackHandler)

想要获得更好的阅读体验?

想要获得文章内容更新?

链接无法点击?

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180706G0203C00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券