为什么Back键无法在此Android webview中运行?

时间:2013-02-15 18:21:34

标签: java android eclipse android-webview

在Webview中使用“后退”按钮时遇到问题。

我不确定我应该在代码的哪个部分放置onKeyDown()部分(当前属于最后@Override

mywebview.canGoBack()mywebview.goBack()都会导致错误,说“mywebview无法解析”。

如果我将mywebview.setWebClient(...)后的括号移到底部,mywebview-error会消失,但overrideonKeyDownreturn truereturn super会导致各种错误。

谁能告诉我该怎么做?

代码:

package com.sib;

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

public class SiB extends Activity {

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.sib);

        WebView mywebview = (WebView) findViewById(R.id.webview);
        mywebview.loadUrl("url");

        WebSettings webSettings = mywebview.getSettings();
        webSettings.setJavaScriptEnabled(true);

        mywebview.setWebViewClient(new WebViewClient());

    }


    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {

        if ((keyCode == KeyEvent.KEYCODE_BACK) && mywebview.canGoBack()) {
            mywebview.goBack();
            return true;
        }
        return super.onKeyDown(keyCode, event);
    }
}

2 个答案:

答案 0 :(得分:3)

使mywebview成为一个类实例变量。

public class SiB extends Activity {
WebView mywebview;

然后确保不要通过取出onCreate()中的声明来遮蔽它。它应该是这样的:

mywebview = (WebView) findViewById(R.id.webview);
mywebview.loadUrl("url");

基于what I can find,Gabe是对的。用于背压的onKeyDown()仅适用于API 4及更低版本。 onBackPressed()应该适用于比API 4更新的每一个。

@Override
public void onBackPressed(){

    if (mywebview.canGoBack()) {
        mywebview.goBack();
        return;
    }
    super.onBackPressed();      
}

答案 1 :(得分:2)

onKeyDown不起作用。你需要覆盖onBackPressed。