java - 返回按钮 Android WebView

标签 java android

首先,我对 Java 一点也不了解。我做前端开发,就是这样,我尝试过查看文档和教程,但遇到了问题。我有一个网站,我是试图让它在 Android 上运行。我几乎一切正常,除了在 Android 设备上按回退出应用程序(这是我所读到的内容中所期望的)

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

这是我尝试添加到代码中的内容,但出现错误:

Error:(45, 24) error: non-static method canGoBack() cannot be referenced from a static context

Error:(46, 24) error: non-static method goBack() cannot be referenced from a static context

Error:(48, 22) error: cannot find symbol method onBackPressed()

Error:(43, 9) error: method does not override or implement a method from a supertype

非常感谢!

P.S - 这是完整的代码。

package com.appname.appname;

import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.view.KeyEvent;

public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    WebView myWebView = (WebView) findViewById(R.id.myWebView);
    myWebView.loadUrl("http://www.website.com");
    myWebView.setWebViewClient(new MyWebViewClient());

    //Settings
    WebSettings webSettings = myWebView.getSettings();
    webSettings.setJavaScriptEnabled(true);

}

private class MyWebViewClient extends WebViewClient {

    //Open links internally
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        if (Uri.parse(url).getHost().equals("www.website.com")) {
            return false;
        }
        Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
        startActivity(intent);
        return true;
    }

    //Back Button Fix

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

谢谢。

编辑:我也尝试过在另一篇 Stack 文章中找到的代码。

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

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

教程中告诉我按 ctrl+o(在 Android Studio 中)并选择 onKeyDown 的覆盖,但这不在我的列表中。然后我发现onKeyDown是针对2.0之前的手机的?所以我尝试寻找 onBackPressed 但我也找不到。我知道这将是一件非常容易的事情..

最佳答案

尝试改变:

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

至:

@Override
public void onBackPressed()
{
    WebView webView = (WebView) findViewById(R.id.webView1);
    if(webView.canGoBack()){
        webView.goBack();
    }else{
        super.onBackPressed();
    }
}

说明: 您应该为您正在使用的 Web View 实例调用 canGoBack()goBack()(移至上一个 View )。这也是为什么该方法是在实例级别而不是在类级别(静态)声明的

更新:

声明全局

 WebView myWebView;


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

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

完整代码:

 package com.appname.appname;

    import android.app.Activity;
    import android.content.Intent;
    import android.net.Uri;
    import android.os.Bundle;
    import android.webkit.WebSettings;
    import android.webkit.WebView;
    import android.webkit.WebViewClient;
    import android.view.KeyEvent;

    public class MainActivity extends Activity {

       WebView myWebView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        this.myWebView = (WebView) findViewById(R.id.myWebView);
        myWebView.loadUrl("http://www.website.com");
        myWebView.setWebViewClient(new MyWebViewClient());

        //Settings
        WebSettings webSettings = myWebView.getSettings();
        webSettings.setJavaScriptEnabled(true);

    }

    private class MyWebViewClient extends WebViewClient {

        //Open links internally
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            if (Uri.parse(url).getHost().equals("www.website.com")) {
                return false;
            }
            Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
            startActivity(intent);
            return true;
        }

      }


        //Back Button Fix

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

关于java - 返回按钮 Android WebView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37743217/

相关文章:

java - Setter 和 Getter 函数。在安卓系统中。性能开销?

android - Firebase GoogleSignInResult 总是返回 false

Android ListView 项目选择问题

java - JFrame 中的渐变背景

java - 将图像从一个 ImageButton 传输到另一个

android - 链接自定义.so库时,链接器失败

android - 在 Kotlin 中设置 Android 监听器 - 在 lambda 中使用 return

java - 我可以使用 JCheckbox 来显示 "mixed state"

java - 将字符串(时间戳)转换为整数

java - Mockito 使用正则表达式验证是否使用正确的参数调用了方法