0

I am writing a simple WebView application. It works completely. I can't figure out exactly where to insert the code so that the back button does not close the application (but returns to the previous page). Tell me where exactly and what to insert?

Here is the code sample I'm using:

package com.example.lampamx;
import androidx.appcompat.app.AppCompatActivity;
import android.annotation.TargetApi;
import android.os.Build;
import android.os.Bundle;
import android.webkit.WebResourceRequest;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    WebView webView = findViewById(R.id.webView);
    webView.getSettings().setJavaScriptEnabled(true);
    WebSettings settings = webView.getSettings();
    settings.setDomStorageEnabled(true);
    webView.loadUrl("https://google.com/");

    WebViewClient webViewClient = new WebViewClient() {
        @SuppressWarnings("deprecation") @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            view.loadUrl(url);
            return true;
        }

        @TargetApi(Build.VERSION_CODES.N) @Override
        public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
            view.loadUrl(request.getUrl().toString());
            return true;
        }

    };
    webView.setWebViewClient(webViewClient);
}

}

UPDATE! Solved my problem. CODE:

package com.example.lampamx;

import androidx.appcompat.app.AppCompatActivity;

import android.annotation.TargetApi;
import android.os.Build;
import android.os.Bundle;
import android.webkit.WebResourceRequest;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;


public class MainActivity extends AppCompatActivity {

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

}
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    webView = findViewById(R.id.webView);
    webView.getSettings().setJavaScriptEnabled(true);
    WebSettings settings = webView.getSettings();
    settings.setDomStorageEnabled(true);
    webView.loadUrl("http://google.com/");
    WebViewClient webViewClient = new WebViewClient() {
        @SuppressWarnings("deprecation")
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            view.loadUrl(url);
            return true;
        }

        @TargetApi(Build.VERSION_CODES.N)
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
            view.loadUrl(request.getUrl().toString());
            return true;
        }

    };
    webView.setWebViewClient(webViewClient);
}

};

Jo Troy
  • 11
  • 2
  • Does this answer your question? [How to go back to previous page if back button is pressed in WebView?](https://stackoverflow.com/questions/6077141/how-to-go-back-to-previous-page-if-back-button-is-pressed-in-webview) (at first I've wrote answer, then noticed that this question is so basic that it must have answer somewhere) – snachmsm Jan 05 '22 at 12:24

1 Answers1

0

use onBackPressed method, check if there is anything in history of WebView, if yes then use goBack()

WebView webView;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    webView = findViewById(R.id.webView);
    ... rest of onCreate
}

@Override
public void onBackPressed() {
    if (webView.canGoBack()) {
        webView.goBack();
        return;
    }
    super.onBackPressed();
}

WebView webView must be declated as class-wide, above onCreate method, not inside

snachmsm
  • 17,866
  • 3
  • 32
  • 74
  • I know this code. I do not understand exactly where to insert it. (tried in different places but doesn't work) – Jo Troy Jan 05 '22 at 12:36
  • Write - Variable 'onBackPressed' is never used – Jo Troy Jan 05 '22 at 12:55
  • you have working snippet in my answer, show exacly where to put this method (after closing bracket of `onCreate` method). if you don't know how to fit this into your code you shouldn't ask questions is here, instead you should learn some very basics of programming (in overall, not even particular language) – snachmsm Jan 05 '22 at 13:14
  • Many thanks. I Solved problem. – Jo Troy Jan 05 '22 at 13:48
  • consider updating/accepting answer if helpful :) good luck! – snachmsm Jan 05 '22 at 13:50