在webview中按下后退按钮时,应用退出

时间:2018-01-28 11:06:32

标签: 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>

main_activity:

 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);
        }
    }

3 个答案:

答案 0 :(得分:4)

您是否曾在onBackPressed()中尝试过:

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

答案 1 :(得分:1)

更改活动中onBackPressed事件的代码:

 @Override
    public void onBackPressed() {
        //write your code here
        //super.onBackPressed();

    }

答案 2 :(得分:1)

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

  

如果提供了WebViewClient,则返回true会导致当前WebView放弃加载URL,而返回false会导致WebView照常继续加载URL。

因此,shouldOverrideUrlLoading返回应为false,请注意为true。 True将强制同时禁用onbackpress覆盖方法(我认为)并加载更多Urls。

因此,代码应类似于:

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

我也用过:

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

}

希望我将来对您有帮助!