前言

fragment中加载webview如果不处理返回键
那么当你打开多个H5页面的时候 会一次性回退到根级

有时候我们需要一个缓冲 就是一级一级退出 给人一个良好的体验
该怎么做呢?
废话不多说 直接上代码

定义接口

定义一个接口 传入view

/*** Author      :Lyudony.* Created     :2021/2/10* Description :定义接口 传入view* */
public interface BackHandledInterface  {void setSelectedFragment(BackHandledFragment selectedFragment);}

写一个基类Fragment

public abstract class BackHandledFragment extends BaseFragment {private BackHandledInterface mBackHandledInterface;/*** 所有继承BackHandledFragment的子类都将在这个方法中实现物理Back键按下后的逻辑* FragmentActivity捕捉到物理返回键点击事件后会首先询问Fragment是否消费该事件* 如果没有Fragment消息时FragmentActivity自己才会消费该事件*/public abstract boolean onBackPressed();@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);if (!(getActivity() instanceof BackHandledInterface)) {throw new ClassCastException("Hosting Activity must implement BackHandledInterface");} else {this.mBackHandledInterface = (BackHandledInterface) getActivity();}}@Overridepublic void onStart() {super.onStart();//告诉FragmentActivity,当前Fragment在栈顶mBackHandledInterface.setSelectedFragment(this);}
}

MainActivity中处理 物理返回键

别忘了 让MainActivityimplements BackHandledInterface接口

   //处理Fragment中的返回键private BackHandledFragment mBackHandedFragment;@Overridepublic void setSelectedFragment(BackHandledFragment selectedFragment) {this.mBackHandedFragment = selectedFragment;}@Overridepublic void onBackPressed() {if (mBackHandedFragment == null || !mBackHandedFragment.onBackPressed()) {if (getSupportFragmentManager().getBackStackEntryCount() == 0) {if ((System.currentTimeMillis() - lastTime) > 2000) {lastTime = System.currentTimeMillis();ToastUtils.showShort(this, "再点击一次退出程序", Gravity.CENTER);} else {super.onBackPressed();}} else {getSupportFragmentManager().popBackStack(); //fragment 出栈}}}

别忘了 让MainActivityimplements BackHandledInterface接口

最后 方法

在你使用的fragment中继承基类BackHandledFragment

然后重写父类抽象方法 onBackPressed()

判断

 @Overridepublic boolean onBackPressed() {//如果webview有上一层 就返回上一层if (mWebView.canGoBack()) {mWebView.goBack();return true;} else {//交给父类return false;}}

如此 便解决了Fragment中加载webview对物理返回键的监听

总结

现在是 2021 02 10 凌晨 2:29 明天就是除夕了
一个人在异乡 真的好孤单 : (
为了理想 努力吧!

Android webView中监听物理返回键一层一层退出相关推荐

  1. android 监听物理返回键,Android应用开发之react-native 监听Android物理返回键

    本文将带你了解Android应用开发之react-native 监听Android物理返回键,希望本文对大家学Android有所帮助. 1. componentWillMount(){         ...

  2. cordova app 监听物理返回键

    物理返回键指的是手机系统自带的返回按钮,通过cordova监听返回按钮操作,可以禁止某些页面的返回操作,以及实现点击两次返回按钮退出应用. var pageUrl = window.location. ...

  3. vue监听物理返回键事件

    在一些项目支付页中,有些用户因价格不太满意等导致成交失败,点击返回键退出页面,这个时候可以通过监听用户返回动作来触发某些事件,比如弹出红包优惠等等. // 判断设备是否支持 mounted() {if ...

  4. uni-app在安卓手机监听物理返回键

    //在项目的首页进行监听onLoad(){ //写在onLoad钩子里使得进入后直接被调用var webview = plus.webview.currentWebview();//调用H5+API获 ...

  5. Android监听手机返回键

    Android在做项目时,有时候点击返回按钮没反应(有冲突),那就需要我们监听返回键.重写onKeyDown()方法: // 监听手机返回键 @Override public boolean onKe ...

  6. iOS小技能:监听H5页面goBack返回事件 网页监听APP返回键 (NavigationBackItemInjection)

    文章目录 引言 I . iOS监听H5页面goBack返回事件 1.1 UIWebView 监听H5页面goBack返回事件 1.2 WKWebView监听H5页面goBack返回事件 II. 网页监 ...

  7. 微信公众号监听手机返回键事件jssdk—wx.closeWindow

    需求场景: 只有扫码初始进入异业联盟活动页,0元券直接弹框领取成功(如图1) 抛出问题: 进入优惠券包后到另一个页面(如图1) 然后按手机返回会回到异业联盟活动页,始终弹出领取活动页面 解决方案: 在 ...

  8. JS 监听手机返回键

    JS监听手机返回键,需要用些前端的"奇技淫巧". 核心代码如下: if (window.history && window.history.pushState) { ...

  9. 原生js监听手机返回键

    创建人:hu_time 描述:js监听手机返回键 普通页面跳转,监听返回上一页: document.addEventListener("plusready", function() ...

最新文章

  1. ProtoBuf格式详解
  2. 比特币现金开发者:BCH网络将“提升到VISA级别”来处理交易
  3. RAM测试方法 C语言实现,有哪些常用单片机系统RAM测试方法?基于种子和逐位倒转的RAM故障测试法有什么优点?...
  4. 基于迭代次数的多中心定位分类法
  5. qpython3使用手册图_qpython图形
  6. ASP.NET MVC 3: Razor视图引擎中 @: 和text 语法【转载】
  7. Active Directory系列之十七:实战详解域信任关系
  8. Tkinter图片按钮
  9. Java反射在Main方法的中的而应用
  10. 8 | Spatial-based GNN/convolution模型之GAT(受欢迎)
  11. Unity 血条跟随效果
  12. JSTL fmt 标签 使用
  13. java计算机毕业设计网络课程答疑系统MyBatis+系统+LW文档+源码+调试部署
  14. node.js实现网络爬虫获取区划代码和城乡划分代码
  15. 转录组测序(质控、比对、计数)
  16. Composition API的优势
  17. 2022年餐饮连锁行业研究报告
  18. 自动变量,非自动变量,全局变量与局部变量
  19. 王岚老师计算机,平凡中演绎精彩——优秀教师王岚
  20. 大学本科毕业生如何免费进行论文查重

热门文章

  1. SQL Server索引
  2. java面试(二)--(1)EJB的几种类型(2)Hibernate的悲观锁和乐观锁(3) 二叉搜索树与双向链表
  3. 基于单片机的防酒驾/酒精检测系统设计(#0425)
  4. iOS 推送通知授权请求优化
  5. 数据结构与算法_04_回头是岸依好汉(回溯算法)
  6. Ubuntu Server下给树莓派安装摄像头
  7. 售前管理——怎样写解决方案
  8. tokuDB 使用详解及其注意事项(2)
  9. 华为Atlas人工智能计算平台概述
  10. 如何配置magento免运费商品方法