java - Webview 后退按钮(goback)不起作用

标签 java android webview

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ我解决了ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

  // Marshmallow below
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
    if (view.canGoBack()) {
       view.loadUrl(url);
       return true;
    }
    return false;
}


// Nougat above
@TargetApi(Build.VERSION_CODES.N)
@Override
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {

    if (request.isRedirect()){
        view.loadUrl(url);
        return true;
    }
    return false;
}

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

后退按钮突然不起作用, 效果很好,我没有更新代码。

如果我按下后退按钮,它应该在页面返回主页时关闭。 但是,当我按下后退按钮时,我的代码应用程序无论在哪里都会关闭。

我认为返回代码( goBack、canGoBack )无法正常工作。

错误代码

E/ViewSystem: ViewRootImpl #2 Surface is not valid.
E/File: fail readDirectory() errno=2
W/DisplayListCanvas: DisplayListCanvas is started on unbinded RenderNode (without mOwningView)
enter code here

MainActivity.java

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.webkit.WebView;
import android.webkit.WebViewClient;

公共(public)类 MainActivity 扩展 AppCompatActivity {

private WebView myWebView;
public static final String INTENT_PROTOCOL_START = "intent:";
public static final String INTENT_PROTOCOL_INTENT = "#Intent;";
public static final String INTENT_PROTOCOL_END = ";end;";
public static final String GOOGLE_PLAY_STORE_PREFIX = "market://details?id=";

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    myWebView = (WebView)findViewById(R.id.webview);


    myWebView.setWebViewClient(new MyWebViewClient());
    myWebView.goBack();
    myWebView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
    myWebView.getSettings().setJavaScriptEnabled(true);

    myWebView.loadUrl("http://fpfriends.com");
}

private class MyWebViewClient extends WebViewClient{
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url){
        view.loadUrl(url);
        return true;
    }
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if ((keyCode == KeyEvent.KEYCODE_BACK) && myWebView.canGoBack()) {
        myWebView.goBack();
        return true;
    }

    return super.onKeyDown(keyCode, event);
}

// I tried below code too.
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (event.getAction() == KeyEvent.ACTION_DOWN) {
        switch (keyCode) {
            case KeyEvent.KEYCODE_BACK:
                if (myWebView.canGoBack()) {
                    myWebView.goBack();
                } else {
                    finish();
                }
               return true;
        }
    }
    return super.onKeyDown(keyCode, event); //
 }
}

最佳答案

尝试调用 onBackPressed

@Override
public void onBackPressed() {
    super.onBackPressed();
}

或者像这样改变你的 onKeyDown 方法

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {

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

关于java - Webview 后退按钮(goback)不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47979789/

相关文章:

android - 我可以只为状态栏设置 FLAG_LAYOUT_NO_LIMITS 吗?

Android Webview Facebook 登录

javascript - 设置滚动位置以在 Xamarin.Ios 中搜索字符串

java - 用 Class.forName() 初始化一个类,它有一个带参数的构造函数

android - 由于 RECEIVE_SMS 权限被拒绝,Cordova Android 应用程序在 Android P 上崩溃

java - ProcessBuilder 和 Runtime.exec() 的区别

android - 为什么在 Horizo​​ntalPager.OnScrollListener() 接口(interface)中多次调用 onViewScrollFinished

android - 如何让Android webview记住用户名和密码?

Java小程序在本地运行,但不在主机上运行

java - 计算出 Google App 引擎实体的属性数据类型