android – 在WebView中启用后退按钮

android – 在WebView中启用后退按钮,第1张

概述我刚刚开始使用 Android SDK.我想用WebView创建一个只显示本地网页的简单应用程序.我已经使用了我在网上找到的例子来制作它. 该应用程序工作得很好,直到我想添加一个后退按钮.当按下电话后退按钮时,应用程序崩溃. 这是我的MainActivity.java package com.hspd.avhor;import android.app.Activity;import andr 我刚刚开始使用 Android SDK.我想用WebVIEw创建一个只显示本地网页的简单应用程序.我已经使用了我在网上找到的例子来制作它.

该应用程序工作得很好,直到我想添加一个后退按钮.当按下电话后退按钮时,应用程序崩溃.

这是我的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中启用后退按钮所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1134399.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-30
下一篇2022-05-30

发表评论

登录后才能评论

评论列表(0条)

    保存