首先,我对 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/