2016-04-01 39 views
2

In meiner Anwendung verwende ich eine Webansicht, um eine URL zu öffnen. Die URL ist sehr einfach, es dauert nur Sekunden, um zu laden. Der Fortschrittsbalken wird jedoch nicht ausgeblendet, wenn die URL vollständig geladen wird. Ich kann nicht herausfinden, was falsch ist. Bitte hilf mir. Unten poste ich den Code.Android: Progressbar lädt URL, lädt weiter

WebView Klasse

public class noti_cse extends BaseActivity { 
    private WebView webView; 

    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.noti_cse); 
     // overridePendingTransition(0, 0); 

     // webView = (WebView) findViewById(R.id.webcse); 
     // webView.setWebViewClient(new MyWebViewClient()); 
     if (!DetectConnection.checkInternetConnection(this)) { 
      Toast.makeText(getApplicationContext(), "No Internet!", Toast.LENGTH_SHORT).show(); 
     } else { 
      webView = (WebView) findViewById(R.id.webcse); 
      webView.setWebViewClient(new CustomWebViewClient()); 
      webView.clearCache(true); 
      webView.clearHistory(); 
      webView.getSettings().setJavaScriptEnabled(true); 
      webView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true); 
      webView.getSettings().setBuiltInZoomControls(true); 
      startWebView("http://notify.php"); 
     } 


     // webView.getSettings().setJavaScriptEnabled(true); 
     // startWebView("http://notify.php"); 
     // webView.getSettings().setRenderPriority(WebSettings.RenderPriority.HIGH); 

     // webView.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK); 


    } 


    private void startWebView(String url) { 

     //Create new webview Client to show progress dialog 
     //When opening a url or click on link 

     webView.setWebViewClient(new WebViewClient() { 
      ProgressDialog progressDialog; 

      //If you will not use this method url links are opeen in new brower not in webview 
      public boolean shouldOverrideUrlLoading(WebView view, String url) { 
       view.loadUrl(url); 
       return true; 
      } 

      //Show loader on url load 
      public void onLoadResource(WebView view, String url) { 
       if (progressDialog == null) { 
        // in standard case YourActivity.this 
        progressDialog = new ProgressDialog(noti_cse.this); 
        progressDialog.setMessage("On the Way!!!"); 
        progressDialog.setCanceledOnTouchOutside(false); 
        progressDialog.show(); 
       } 
      } 

      public void onPageFinished(WebView view, String url) { 
       try { 
        if (progressDialog.isShowing()) { 
         progressDialog.dismiss(); 
         progressDialog = null; 
        } 
       } catch (Exception exception) { 
        exception.printStackTrace(); 
       } 
      } 

     }); 
     webView.getSettings().setJavaScriptEnabled(true); 
     webView.loadUrl(url); 

    } 

    private class CustomWebViewClient extends WebViewClient { 
     public boolean shouldOverrideUrlLoading(WebView view, String url) { 
      if (!DetectConnection.checkInternetConnection(noti_cse.this)) { 
       Toast.makeText(getApplicationContext(), "No Internet!", Toast.LENGTH_SHORT).show(); 
      } else { 
       view.loadUrl(url); 
      } 
      return true; 
     } 
    } 

    @Override 
    protected boolean useDrawerToggle() { 
     return false; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     if (item.getItemId() == R.id.action_placements) 
      return true; 

     if (item.getItemId() == android.R.id.home) 
      onBackPressed(); 

     return super.onOptionsItemSelected(item); 
    } 

Antwort

0

Sie setzen 2 WebViewClient.

Erstens:

webView.setWebViewClient(new CustomWebViewClient()); 

Und danach, die Sie anrufen

startWebView() 

, die eine neue WebviewClient setzt.

Sie können Ihre Methode wie unten ändern:

private void startWebView(String url) { 

    //Create new webview Client to show progress dialog 
    //When opening a url or click on link 

    webView.setWebViewClient(new WebViewClient() { 
     ProgressDialog progressDialog; 

     //If you will not use this method url links are opeen in new brower not in webview 
     public boolean shouldOverrideUrlLoading(WebView view, String url) { 
      if (!DetectConnection.checkInternetConnection(noti_cse.this)) { 
      Toast.makeText(getApplicationContext(), "No Internet!", Toast.LENGTH_SHORT).show(); 
      } else { 
       view.loadUrl(url); 
      } 
      return true; 
     } 

     //Show loader on url load 
     @Override 
     public void onPageStarted(WebView view, String url, Bitmap favicon){ 
      if (progressDialog == null) { 
       // in standard case YourActivity.this 
       progressDialog = new ProgressDialog(noti_cse.this); 
       progressDialog.setMessage("On the Way!!!"); 
       progressDialog.setCanceledOnTouchOutside(false); 
       progressDialog.show(); 
      } 
      super.onPageStarted(view, url, favicon); 
     } 

     public void onPageFinished(WebView view, String url) { 
      try { 
       if (progressDialog.isShowing()) { 
        progressDialog.dismiss(); 
        progressDialog = null; 
       } 
      } catch (Exception exception) { 
       exception.printStackTrace(); 
      } 
     } 

    }); 
    webView.getSettings().setJavaScriptEnabled(true); 
    webView.loadUrl(url); 

} 

und entfernen Sie diese Zeile Form onCreate() -Methode:

webView.setWebViewClient(new CustomWebViewClient());