
该应用程序工作得很好,直到我想添加一个后退按钮.当按下电话后退按钮时,应用程序崩溃.
这是我的MainActivity.java
package com.hspd.avhor;import androID.app.Activity;import androID.os.Bundle;import androID.vIEw.Menu;import androID.webkit.WebVIEw;import androID.webkit.WebVIEwClIEnt;public class MainActivity extends Activity { WebVIEw wv; @OverrIDe protected voID onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentVIEw(R.layout.activity_main); WebVIEw wv = (WebVIEw)findVIEwByID(R.ID.hspd_webvIEw); wv.setWebVIEwClIEnt(new WebVIEwClIEnt() { @OverrIDe public boolean shouldOverrIDeUrlLoading(WebVIEw vIEw,String url){ vIEw.loadUrl(url); return true; } }); wv.loadUrl("file:///androID_asset/one.htm"); } @OverrIDe public voID onBackpressed() { if(wv.canGoBack()) wv.goBack(); else super.onBackpressed(); } @OverrIDe public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main,menu); return true; }} 这是我的activity_main.xml:
<ScrollVIEw xmlns:androID="http://schemas.androID.com/apk/res/androID" xmlns:tools="http://schemas.androID.com/tools" androID:layout_wIDth="match_parent" androID:layout_height="match_parent" androID:fillVIEwport="true" androID:paddingBottom="@dimen/activity_vertical_margin" androID:paddingleft="@dimen/activity_horizontal_margin" androID:paddingRight="@dimen/activity_horizontal_margin" androID:paddingtop="@dimen/activity_vertical_margin" tools:context=".MainActivity" > <WebVIEw androID:ID="@+ID/hspd_webvIEw" androID:layout_wIDth="match_parent" androID:layout_height="wrap_content" /></ScrollVIEw>
这是我在logcat中的错误:
04-22 17:48:06.953: W/dalvikvm(799): threadID=1: thread exiting with uncaught exception (group=0x40a71930)04-22 17:48:06.972: E/AndroIDRuntime(799): FATAL EXCEPTION: main04-22 17:48:06.972: E/AndroIDRuntime(799): java.lang.NullPointerException04-22 17:48:06.972: E/AndroIDRuntime(799): at com.hspd.avhor.MainActivity.onKeyDown(MainActivity.java:41)04-22 17:48:06.972: E/AndroIDRuntime(799): at androID.vIEw.KeyEvent.dispatch(KeyEvent.java:2609)04-22 17:48:06.972: E/AndroIDRuntime(799): at androID.app.Activity.dispatchKeyEvent(Activity.java:2375)04-22 17:48:06.972: E/AndroIDRuntime(799): at com.androID.internal.policy.impl.PhoneWindow$DecorVIEw.dispatchKeyEvent(PhoneWindow.java:1847)04-22 17:48:06.972: E/AndroIDRuntime(799): at androID.vIEw.VIEwRootImpl.deliverKeyEventPostIme(VIEwRootImpl.java:3701)04-22 17:48:06.972: E/AndroIDRuntime(799): at androID.vIEw.VIEwRootImpl.handleImeFinishedEvent(VIEwRootImpl.java:3651)04-22 17:48:06.972: E/AndroIDRuntime(799): at androID.vIEw.VIEwRootImpl$VIEwRootHandler.handleMessage(VIEwRootImpl.java:2818)04-22 17:48:06.972: E/AndroIDRuntime(799): at androID.os.Handler.dispatchMessage(Handler.java:99)04-22 17:48:06.972: E/AndroIDRuntime(799): at androID.os.Looper.loop(Looper.java:137)04-22 17:48:06.972: E/AndroIDRuntime(799): at androID.app.ActivityThread.main(ActivityThread.java:5041)04-22 17:48:06.972: E/AndroIDRuntime(799): at java.lang.reflect.Method.invokeNative(Native Method)04-22 17:48:06.972: E/AndroIDRuntime(799): at java.lang.reflect.Method.invoke(Method.java:511)04-22 17:48:06.972: E/AndroIDRuntime(799): at com.androID.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)04-22 17:48:06.972: E/AndroIDRuntime(799): at com.androID.internal.os.ZygoteInit.main(ZygoteInit.java:560)04-22 17:48:06.972: E/AndroIDRuntime(799): at dalvik.system.NativeStart.main(Native Method)
提前致谢 :)
解决方法 覆盖onKeyDown(params),检查按下的键是否为后退按钮,检查webvIEw是否可以导航到上一页,如果是,则导航到上一页.如果没有要显示的网页,您可以完成活动您可以使用以下
@OverrIDepublic boolean onKeyDown(int keyCode,KeyEvent event) { if ((keyCode == KeyEvent.KEYCODE_BACK) && webVIEw.canGoBack()) { //if Back key pressed and webvIEw can navigate to prevIoUs page webVIEw.goBack(); // go back to prevIoUs page return true; } else { finish(); // finish the activity } return super.onKeyDown(keyCode,event);} 编辑:
删除xml布局中的scrollvIEw.试试下面的内容
<linearLayout xmlns:androID="http://schemas.androID.com/apk/res/androID"xmlns:tools="http://schemas.androID.com/tools"androID:layout_wIDth="match_parent"androID:layout_height="match_parent"tools:context=".MainActivity" ><WebVIEw androID:layout_wIDth="fill_parent" androID:layout_height="fill_parent" androID:ID="@+ID/wv"></WebVIEw></linearLayout>
编辑:2
这是一个有效的样本.在三星galaxy s3上测试过
activtiy_main.xml
<relativeLayout xmlns:androID="http://schemas.androID.com/apk/res/androID"xmlns:tools="http://schemas.androID.com/tools"androID:layout_wIDth="match_parent"androID:layout_height="match_parent"tools:context=".MainActivity" ><WebVIEwandroID:layout_wIDth="fill_parent"androID:layout_height="fill_parent"androID:layout_centerHorizontal="true"androID:layout_centerVertical="true"androID:ID="@+ID/wv"/></relativeLayout>
主要活动
public class MainActivity extends Activity { private WebVIEw webVIEw;@OverrIDeprotected voID onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentVIEw(R.layout.activity_main); webVIEw = (WebVIEw) findVIEwByID(R.ID.wv); webVIEw.getSettings().setJavaScriptEnabled(true); webVIEw.setWebChromeClIEnt(new WebChromeClIEnt() { public voID onProgressChanged(WebVIEw vIEw,int progress) { MainActivity.this.setProgress(progress * 1000); } }); webVIEw.setWebVIEwClIEnt(new WebVIEwClIEnt() { public voID onReceivedError(WebVIEw vIEw,int errorCode,String description,String failingUrl) { Toast.makeText(MainActivity.this,"Oh no! " + description,Toast.LENGTH_SHORT).show(); } }); webVIEw.loadUrl("http://slashdot.org/");} @OverrIDepublic boolean onKeyDown(int keyCode,KeyEvent event) { if ((keyCode == KeyEvent.KEYCODE_BACK) && webVIEw.canGoBack()) { webVIEw.goBack(); return true; } else { finish(); } return super.onKeyDown(keyCode,event);}} 总结 以上是内存溢出为你收集整理的android – 在WebView中启用后退按钮全部内容,希望文章能够帮你解决android – 在WebView中启用后退按钮所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)