在Webview中按下后退按钮后,应用程序退出

Shu*_*mar 5 android android-webview

按下返回按钮后,应用程序将关闭,而不是返回上一页。

后退按钮代码不适用于这种情况。我尝试了所有可能的代码,但仍然不满意

<?xml version="1.0" encoding="utf-8"?>

<WebView
    android:id="@+id/webview"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    xmlns:android="http://schemas.android.com/apk/res/android">

    </WebView>
Run Code Online (Sandbox Code Playgroud)

主要活动:

 public class MainActivity extends AppCompatActivity {

        WebView mywebView;


        @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mywebView = (WebView) findViewById(R.id.webview);
        mywebView.getSettings().setJavaScriptEnabled(true);
        mywebView.loadUrl("http://www.google.co.in");

            mywebView.setWebViewClient(new WebViewClient(){

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


   }
   //goto previous page

        @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);
        }
    }
Run Code Online (Sandbox Code Playgroud)

小智 11

我最近在这个上浪费了很多时间。请仔细看。WebView Docs shouldoverrideUrlLoading

如果提供了 WebViewClient,则返回 true 会导致当前 WebView 中止加载 URL,而返回 false 会导致 WebView 像往常一样继续加载 URL。

所以 shouldOverrideUrlLoading 返回应该是假的,注意是真的。True 将强制禁用 onbackpress 覆盖方法(我认为)并加载更多 URL。

所以代码应该是这样的:

@Override
            public boolean shouldOverrideUrlLoading(WebView view, String url){//condition or the code
                view.loadUrl(url);
                return false;
            }
        });
Run Code Online (Sandbox Code Playgroud)

我也用过:

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

}
Run Code Online (Sandbox Code Playgroud)

希望我这会在未来有所帮助!


Shy*_*dda 5

你有没有onBackPressed()像这样尝试过:

@Override
    public void onBackPressed() {
        if (mywebView.isFocused() && mywebView.canGoBack()) {
            mywebView.goBack();       
        } else {
            super.onBackPressed();
         }
    }
Run Code Online (Sandbox Code Playgroud)