2017-12-26 4 views
0

Warum gibt WebView canGoBack() immer false zurück?Android - WebView canGoBack() gibt immer false zurück?

if (myWebView.canGoBack()) 
     { myWebView.goBack(); } //always false 

onCreate:

 WebSettings webSettings = myWebView.getSettings(); 
     webSettings.setJavaScriptEnabled(true); 
     webSettings.setJavaScriptCanOpenWindowsAutomatically(true); 
     webSettings.setBuiltInZoomControls(true); 
     myWebView.loadUrl(getString(R.string.base_url)); 
     myWebView.setWebViewClient(new MyWebViewClient(progress)); 

MyWebviewClient:

public class MyWebViewClient extends WebViewClient { 
    private ProgressBar progressBar; 

    public MyWebViewClient(ProgressBar progressBar) { 
     this.progressBar=progressBar; 
     progressBar.setVisibility(View.VISIBLE); 
    } 

    @Override 
    public void onPageStarted(WebView view, String url, Bitmap favicon) { 
     progressBar.setVisibility(View.VISIBLE); 
     share_btn.setVisibility(View.GONE); 
     back_btn.setVisibility(View.GONE); 
     super.onPageStarted(view, url, favicon); 
    } 

    @Override 
    public void onPageFinished(WebView view, String url) { 
     super.onPageFinished(view, url); 
     // TODO Auto-generated method stub 
     progressBar.setVisibility(View.GONE); 
     //hide loading image 
     findViewById(R.id.imageLogo).setVisibility(View.GONE); 
     //show webview 
     findViewById(R.id.websiteView).setVisibility(View.VISIBLE); 
     toolbar.setVisibility(View.VISIBLE); 
     currentURL = url.replace("mapp.",""); 
     if(url.contains("article")) { 
      share_btn.setVisibility(View.VISIBLE); 
      back_btn.setVisibility(View.VISIBLE); 
     } 
    } 

    @SuppressWarnings("deprecation") 
    @Override 
    public boolean shouldOverrideUrlLoading(WebView view, String url) { 
     if (!Global.IsInternetConnected(MainActivity.this)) 
      Toast.makeText(getApplicationContext(), "No internet connection!", Toast.LENGTH_SHORT).show(); 
     else 
      view.loadUrl(url); 
     return true; 
    } 

    @TargetApi(Build.VERSION_CODES.N) 
    @Override 
    public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) { 
     if (!Global.IsInternetConnected(MainActivity.this)) 
      Toast.makeText(getApplicationContext(), "No internet connection!", Toast.LENGTH_SHORT).show(); 
     else { 
      view.loadUrl(request.getUrl().toString()); 
     } 
     return true; 
    } 
} 

Es funktioniert auf dem Emulator pixel_XL_API_25 in Ordnung, aber nicht funktioniert weder Samsung S6 noch Note3.

+0

Warum denken Sie, es sollte ** nicht ** Rückkehr 'false'? –

+0

Verwenden von Toast.makeText auf meinem Handy –

+0

Das ist nicht der Grund, warum 'WebView' Methoden sollten nichts bestimmtes zurückgeben. –

Antwort

0

Schließlich fand ich die Lösung, wurde die Frage in shouldOverrideUrlLoading

finden Sie unten korrigieren shouldOverrideUrlLoading Funktion:

@SuppressWarnings("deprecation") 
    @Override 
    public boolean shouldOverrideUrlLoading(WebView view, String url) { 
     if (!Global.IsInternetConnected(MainActivity.this)) { 
      Toast.makeText(getApplicationContext(), "No internet connection!", Toast.LENGTH_SHORT).show(); 
      return true; 
     } 
     else 
      return super.shouldOverrideUrlLoading(view, url); 
    } 

    @TargetApi(Build.VERSION_CODES.N) 
    @Override 
    public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) { 
     if (!Global.IsInternetConnected(MainActivity.this)) { 
      Toast.makeText(getApplicationContext(), "No internet connection!", Toast.LENGTH_SHORT).show(); 
      return true; 
     } 
     else 
      return super.shouldOverrideUrlLoading(view, request); 
    } 
Verwandte Themen