Search code examples
androidbuttonwebviewback

backbutton on my android webview


I tried to add a back button to my android webview but i've got this error: The method onBackPressed() of type new WebViewClient(){} must override or implement a supertype method

This is my Java file:

package sherdle.donald.duck.app;
import android.app.Activity;
import android.os.Bundle;
import android.view.Window;
import android.webkit.WebChromeClient;
import android.webkit.WebView;
import android.webkit.WebViewClient;
public class WebPageLoader extends Activity
{
WebView webview;

final Activity activity = this;

@Override
public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    this.getWindow().requestFeature(Window.FEATURE_PROGRESS);
    setContentView(R.layout.main);
    WebView webView = (WebView) findViewById(R.id.webview);
    webView.getSettings().setJavaScriptEnabled(true);

    webView.setWebChromeClient(new WebChromeClient() {
        public void onProgressChanged(WebView view, int progress)
        {
            activity.setTitle("Loading...");
            activity.setProgress(progress * 100);

            if(progress == 100)
                activity.setTitle(R.string.app_name);
        }
    });

    webView.setWebViewClient(new WebViewClient() {
        @Override
        public void onReceivedError(WebView view, int errorCode, String description,    String failingUrl)
        {
            // Handle the error
        }
        @Override
        public void onBackPressed() {
        // do something on back.
        return;
        }

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

    webView.loadUrl("http://example.com");
   }
}

Thanks for your help.


Solution

  • According to the doc, there is no onBackPressed method in the WebViewClient class. Did you want to Override it on your activity ? try smthing like this:

    package sherdle.donald.duck.app;
    import android.app.Activity;
    import android.os.Bundle;
    import android.view.Window;
    import android.webkit.WebChromeClient;
    import android.webkit.WebView;
    import android.webkit.WebViewClient;
    public class WebPageLoader extends Activity
    {
    WebView webView;
    
    final Activity activity = this;
    
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        this.getWindow().requestFeature(Window.FEATURE_PROGRESS);
        setContentView(R.layout.main);
        webView = (WebView) findViewById(R.id.webview);
        webView.getSettings().setJavaScriptEnabled(true);
    
        webView.setWebChromeClient(new WebChromeClient() {
            public void onProgressChanged(WebView view, int progress)
            {
                activity.setTitle("Loading...");
                activity.setProgress(progress * 100);
    
                if(progress == 100)
                    activity.setTitle(R.string.app_name);
            }
        });
    
        webView.setWebViewClient(new WebViewClient() {
            @Override
            public void onReceivedError(WebView view, int errorCode, String description,    String failingUrl)
            {
                // Handle the error
            }
    
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url)
            {
                view.loadUrl(url);
                return true;
            }
        });
    
        webView.loadUrl("http://example.com");
       }
        @Override
        public void onBackPressed (){
            if(webView.canGoBack()) webView.goBack();
            else super.onBackPressed();
        }
    }