Android webView中监听物理返回键一层一层退出
发布日期:2021-07-01 00:00:28
浏览次数:2
分类:技术文章
本文共 2578 字,大约阅读时间需要 8 分钟。
前言
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(); @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (!(getActivity() instanceof BackHandledInterface)) { throw new ClassCastException ("Hosting Activity must implement BackHandledInterface"); } else { this.mBackHandledInterface = (BackHandledInterface) getActivity(); } } @Override public void onStart() { super.onStart(); //告诉FragmentActivity,当前Fragment在栈顶 mBackHandledInterface.setSelectedFragment(this); }}
MainActivity中处理 物理返回键
别忘了 让MainActivityimplements BackHandledInterface
接口
//处理Fragment中的返回键 private BackHandledFragment mBackHandedFragment; @Override public void setSelectedFragment(BackHandledFragment selectedFragment) { this.mBackHandedFragment = selectedFragment; } @Override public 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()
判断
@Override public boolean onBackPressed() { //如果webview有上一层 就返回上一层 if (mWebView.canGoBack()) { mWebView.goBack(); return true; } else { //交给父类 return false; } }
如此 便解决了Fragment中加载webview对物理返回键的监听
总结
现在是 2021 02 10 凌晨 2:29 明天就是除夕了
一个人在异乡 真的好孤单 : ( 为了理想 努力吧!转载地址:https://lvshichunqiu.blog.csdn.net/article/details/113778208 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
关注你微信了!
[***.104.42.241]2024年05月04日 00时09分18秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
内存区划分、内存分配、常量存储区、堆、栈、自由存储区、全局区[C++][内存管理]...
2019-05-01
define入门
2019-05-01
头文件中 #ifndef---#define---#endif的作用
2019-05-01
分析Linux内核启动过程:从start_kernel到init
2019-05-01
系统调用过程的理解
2019-05-01
LeetCode 96 Unique Binary Search Trees 解题报告
2019-05-01
LeetCode 136 Single Number解题报告
2019-05-01
LeetCode 137 Single Number II 解题报告
2019-05-01
LeetCode 62 Unique Paths 解题报告
2019-05-01
跟踪sys_mkdir的系统调用过程
2019-05-01
Linux系统fork执行过程
2019-05-01
跟踪sys_execve的执行过程
2019-05-01
分析schedule()的执行过程
2019-05-01
Linux内核学习收获
2019-05-01
optirun执行错误的解决办法
2019-05-01
pycharm无法识别pyqt的问题
2019-05-01
STLPort 哈希表 hash_map/hash_multimap 删除速度慢
2019-05-01
deepin系统没有声音的解决方法
2019-05-01