android webview onkeydown,android – WebView片段内的OnKeyDown
它可能会奏效,但这不是一个好主意.如果你没有正确处理Fragment或者你的代码中的某个地方对它的生命周期有点粗心,它很可能会导致崩溃.但有一个简单的方法来解决这个问题.而不是使用静态方法,在实例本身上保存实例和调用方法.这样你可以检查实例是否为null,如果不是,Fragment可以处理对goBack()或canGoBack()本身的调用:
public class MainBrowserActivity extends SingleFragmentActivity {
BrowserFragment browserFragment = null;
@Override
protected Fragment createFragment() {
this.browserFragment = BrowserFragment.newInstance();
return this.browserFragment;
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK && this.browserFragment != null && this.browserFragment.canGoBack()) {
this.browserFragment.goBack();
return true;
}
return super.onKeyDown(keyCode, event);
}
}
如您所见,保存了BrowserFragment实例,然后在BrowserFragment本身上调用goBack()或canGoBack()等方法.当然,您必须在BrowserFragment中实现这些方法,但这不应该是一个问题:
public class BrowserFragment extends Fragment {
public static BrowserFragment newInstance() {
BrowserFragment fragment = new BrowserFragment();
return fragment;
}
private WebView webView;
public View onCreateView(LayoutInflater inflater, ViewGroup parent, Bundle savedInstanceState){
View v = inflater.inflate(R.layout.fragment_activity, parent, false);
getActivity().setTitle(R.string.title_rus);
webView = (WebView) v.findViewById(R.id.webView);
webView.setWebViewClient(new SwingBrowserClient());
WebSettings webSettings = webView.getSettings();
webSettings.setJavaScriptEnabled(true);
Uri data = Uri.parse("http://www.swinginmoscow.ru/m/");
webView.loadUrl(data.toString());
return v;
}
public boolean canGoBack() {
return this.webView != null && this.webView.canGoBack();
}
public void goBack() {
if(this.webView != null) {
this.webView.goBack();
}
}
}
我对您的代码进行了一些额外的改进.首先,我添加了空检查以防止任何可能的NullPointerExceptions,其次建议始终使用静态工厂方法来创建新的Fragments实例.这就是我添加到BrowserFragment的静态newInstance()方法.这样做的好处是,您可以实现一种方法,无论您在何处使用它,都可以为您设置BrowserFragment.您可以向newInstance()方法添加参数以将一些值传递给BrowserFragment或添加一些必需的侦听器等,但由于您没有将任何值传递给BrowserFragment,因此newInstance()方法仍然是空的.尽管如此,最好始终使用这样的工厂方法,即使它们只调用新的BrowserFragment().
通常这种方法要好得多.特别是从体系结构的角度来看,因为您没有直接与Activity中的WebView进行交互. WebView与Activity没有任何关系,它是BrowserFragment实现的一部分,因此Activity不应该知道甚至还有WebView.如何实现对goBack()或canGoBack()的调用或者他们究竟做什么对Activity不感兴趣. Activity只是告诉BrowserFragment“我想回去”,BrowserFragment可以完成工作.这样可以更好地分离职责,使代码更易读,更清晰,更易于维护.
编辑:
另外我不知道SingleFragmentActivity,但通常任何Activity都实现onBackPressed()方法.您不必重写onKeyDown()来捕获后退键事件.你可以这样做:
@Override
public void onBackPressed() {
if (this.browserFragment != null && this.browserFragment.canGoBack()) {
this.browserFragment.goBack();
} else {
// The back key event only counts if we execute super.onBackPressed();
super.onBackPressed();
}
}
如果您有任何其他问题,请随时提出!
android webview onkeydown,android – WebView片段内的OnKeyDown相关推荐
- Android开发实用小技巧九——内嵌WebView的使用(内置浏览器)
文章目录 前言 一.效果展示 二.代码 1.样式布局 2.活动页面 总结 前言 内嵌WebView的使用(内置浏览器). 一.效果展示 二.代码 1.样式布局 res/layout/activity_ ...
- Android:控件WebView显示网页
WebView可以使得网页轻松的内嵌到app里,还可以直接跟js相互调用. webview有两个方法:setWebChromeClient 和 setWebClient setWebClient:主要 ...
- php webview,Android:控件WebView显示网页 – tinyphp – 博客园
WebView可以使得网页轻松的内嵌到app里,还可以直接跟js相互调用. webview有两个方法:setWebChromeClient 和 setWebClient setWebClient:主要 ...
- webview和android做壳,Android Studio 制作一个 WebView 外壳
背景 做为一条BS狗,开发应用当然趋向于BS,为了方便维护,降低开发成本,决定只做一个webview做为程序入口,所有的功能页面集中在服务端. 本次踩坑遇到了 js不支持.点击返回直接退出应用.htt ...
- android webview应用,Android WebView简单应用
WebView是View的1个子类,可让你在activity中显示网页.在布局中拉入1个WebView,1个Button,1个EditText 布局代码以下: xmlns:tools="ht ...
- Android进阶之路 - WebView的使用与后退键处理
本篇为大家带来的是WebView的多种使用场景讲解,说起WebView往往给大家带来的印象应该是Android与H5的混合开发,下面洒家为大家进行详细讲解 我那些关于WebView的回忆 ~ 包含入门 ...
- android webview详情,Android中的WebView详细介绍
Android中WebView的详细解释: 1. 概念: WebView(网络视图)能加载显示网页,可以将其视为一个浏览器.它使用了WebKit渲染引擎加载显示网页. 2. 使用方法: (1).实例化 ...
- Android开发:关于WebView
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://liangruijun.blog.51cto.com/3061169/647456 ...
- android webview实例,android WebView 使用实例
主布局文件: 主活动类WebViewMainActivity.java: package com.example.ch10; import com.example.baseexample.R; imp ...
最新文章
- 【Linux - mysql】linux下mysql报Failed to restart mysqld.service: Unit not found
- 保存Delphi中的环境设置中的library path
- Esper应用以及原理解析
- (JAVA)CollectionDemo2
- php分页页数过多隐藏,织梦DEDE中内容页分页数目太多时隐藏方法
- getclass方法_防止数据重复提交的6种方法(超简单)!
- linux mkswap -p参数,Linux基础命令---mkswap
- 自建站如何通过Facebook广告引流?
- 马斯克亲口承认:自动驾驶的开发难度超乎想象;小米再发1.2亿股权激励;Firefox Lite 已死|极客头条...
- nginx解析漏洞简单复现及修复
- kafka----kafka connect的使用(一)
- AdBlock插件自定义拦截规则
- 网站被国外IP攻击 禁止海外IP访问网站的解决办法
- 中规院交通院《上海全球城市综合交通体系承载能力与开发研究》
- 【专业课程】网络协议分析与安全
- spark kryo java,在Spark中自定义Kryo序列化输入输出API
- Linux环境重启系统网卡down,linux重启网卡命令有哪些
- <机器学习>支持向量机(SVM)理论
- 【R模型】R语言二元logistic回归 (保姆级教程)
- PNG图片宽高crc32爆破代码
热门文章
- C#图表开发——Chart
- CATIA CAA二次开发实现获取几何曲线所对应的具体类型
- 那天,我们笑着说再见,却深知再见遥遥无期
- ORA-39126: Worker unexpected fatal error in KUPW$WORKER.FIXUP_MASTER_TABLE_EXPORT
- 操作系统(二) -- 操作系统的接口与实现
- 一文教你如何用Python读取图片GPS定位
- 自如wi-fi管理密码_如何使您的Dotfile管理轻松自如
- X86 SSE/AVX指令集加速学习
- php修改服务器文件操作权限
- OpenBR安装与编译过程