Android webview上一页的后退按钮无法正常工作

问题描述 投票:4回答:2

我试图覆盖后退按钮,以便它返回上一页,但它只是退出应用程序。这里;代码..请告诉我哪里出错了。

package com.example.thebase;

import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.util.Log;
import android.view.KeyEvent;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Toast;

public class MainAccelerometer extends Activity implements AccelerometerListener{

WebView myWebView;
//Back Button Code
     @Override
        public boolean onKeyDown(int keyCode, KeyEvent event) {
            if(event.getAction() == KeyEvent.ACTION_DOWN){
                switch(keyCode)
                {
                case KeyEvent.KEYCODE_BACK:
                    if(myWebView.canGoBack() == true){
                        myWebView.goBack();
                    }else{
                        finish();
                    }
                    return true;
                }

            }
            return super.onKeyDown(keyCode, event);
        }


//--------------------  


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.accelerometer_example_main);
    //ENABLING JAVASCRIPT CODE
            WebView myWebView = (WebView) findViewById(R.id.webview);
            WebSettings webSettings = myWebView.getSettings();
            webSettings.setJavaScriptEnabled(true);


            //WEBVIEW CODE
              myWebView = (WebView) findViewById(R.id.webview);
            myWebView.loadUrl("http://www.pingcampus.com/greedy/get_category.php");


            //WebView client
              myWebView.setWebViewClient(new HelloWebViewClient());

              //Back Button

              //------


        };
//rest of the code
android webview back-button
2个回答
22
投票

你有onBackPressed()方法来覆盖而不是onKeyDown()。用onKeyDown()替换onBackPressed()如下:

@Override
public void onBackPressed() {
    if (myWebView.canGoBack()) 
        myWebView.goBack();
     else 
        super.onBackPressed();

}

编辑

还要检查你的onCreate()中的第3行

WebView myWebView = (WebView) findViewById(R.id.webview);

你再次声明myWebView作为局部变量,并且没有实例化全局变量,这会抛出NullPointerException并使应用程序崩溃。

因此,请更改您的第3行代码,如下所示:

myWebView = (WebView) findViewById(R.id.webview);

2
投票

无需检查ACTION_DOWN。只是:

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    // Check if the key event was the Back button and if there's history
    if( mWebView != null ) {
        if( (keyCode == KeyEvent.KEYCODE_BACK) && (mWebView.canGoBack()) ) {
            mWebView.goBack();
            return true;
        }
    }
    // If it wasn't the Back key or there's no web page history, bubble up to the default
    // system behavior (probably exit the activity)
    return super.onKeyDown(keyCode, event);
}

或者,你可以覆盖onKeyDown()而不是onBackPressed()

@Override
public void onBackPressed() {
    if( mWebView != null ) {
        if( mWebView.canGoBack() ) {
            mWebView.goBack();
            return;
        }
    }

    return super.onBackPressed();
}
© www.soinside.com 2019 - 2024. All rights reserved.