需要帮助使用手机后退按钮返回Webview

时间:2011-09-14 12:36:12

标签: android button webview back

这是我的代码:

package com.testappmobile;

import android.app.Activity;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.Window;
import android.webkit.WebChromeClient;
import android.webkit.WebView;
import android.webkit.WebViewClient;

public class testappmobileActivity extends Activity

{

    final Activity activity = this;

    private WebView webview;


    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        // Check if the key event was the BACK key and if there's history
        if ((keyCode == KeyEvent.KEYCODE_BACK) && webview.canGoBack()) {
            webview.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);
    }

    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        this.getWindow().requestFeature(Window.FEATURE_PROGRESS);
        setContentView(R.layout.main);
        WebView webView = (WebView) findViewById(R.id.webview);
        webView.getSettings().setJavaScriptEnabled(true);

        webView.setWebChromeClient(new WebChromeClient() {
            public void onProgressChanged(WebView view, int progress)
            {
                activity.setTitle("Loading...");
                activity.setProgress(progress * 100);

                if(progress == 100)
                    activity.setTitle(R.string.app_name);
            }
        });

        webView.setWebViewClient(new WebViewClient() {
            @Override
            public void onReceivedError(WebView view, int errorCode, String description, String failingUrl)
            {
                // Handle the error
            }

            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url)
            {
                view.loadUrl(url);
                return true;
            }
        });


        webView.loadUrl("http://developer.android.com/index.html");
    }
}

现在我无法让硬件返回按钮工作。该应用程序加载正常页面和其他一切,但只要我按下手机后退按钮它崩溃然后强制关闭。  我在过去的3个小时内搜索过Google,并且只发现了很少的信息或链接断开的模糊答案。谷歌的指示也很糟糕,因为我是初学者,他们认为你知道一定数量。

如果代码位于错误的位置,我应该将代码放在哪里?

有错误吗?

干杯!

2 个答案:

答案 0 :(得分:5)

您已在类级别创建了一个webView引用,但从未初始化它,这就是Nul​​lPointerException的原因。我在您的代码中对onCreate方法进行了一些小改动,对其进行分析并进行必要的更改;

@Override
public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                this.getWindow().requestFeature(Window.FEATURE_PROGRESS);
                setContentView(R.layout.main);

                // Don't create another webview reference here,
                // just use the one you declared at class level.
                webView = (WebView) findViewById(R.id.webView);
                webView.getSettings().setJavaScriptEnabled(true);

                webView.setWebChromeClient(new WebChromeClient() {
                    public void onProgressChanged(WebView view, int progress)
                    {
                        activity.setTitle("Loading...");
                        activity.setProgress(progress * 100);

                        if(progress == 100)
                            activity.setTitle(R.string.app_name);
                    }
                });

          // rest of code same
          // ...
          // ...
          // ...
}

希望你明白了。 :)

答案 1 :(得分:0)

您有两个不同的WebView引用。在onCreate的第一个本地,失去了。您在onKeyDown中使用的第二个webview成员,但始终为null。