2012-02-21 4 views
3

Comment afficher la barre de progression lors du chargement de données dans ma vue Web? Mon code:Android: Comment afficher la barre de progression lors du chargement de données dans WebView?

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    this.requestWindowFeature(Window.FEATURE_PROGRESS); 
    getWindow().setFeatureInt(Window.FEATURE_PROGRESS, Window.PROGRESS_VISIBILITY_ON); 
    this.setProgressBarVisibility(true); 
    setContentView(R.layout.layout_article); 
    WebView webview = (WebView) findViewById(R.id.webView); 
    final Activity activity = this; 
    webview.setWebChromeClient(new WebChromeClient() { 
     public void onProgressChanged(WebView view, int progress) { 
      activity.setProgress(progress * 100); 
     } 
    }); 

    webView.loadUrl("http://google.com"); 
} 
+0

Vous devrez déplacer le téléchargement à un thread séparé, à libérer gérer le thread principal de l'interface utilisateur. Vous devrez également décider si vous voulez montrer un fileur ou une barre de progression. –

+1

La meilleure façon est celle suggérée par Paresh, mais vous devez utiliser 'WebViewClient', en utilisant cette technique, vous n'avez pas à regarder la quantité de données que vous avez récupérées sur le serveur. – Yuvi

+0

J'espère que le lien suivant vous aidera: http://stackoverflow.com/questions/9171510/how-to-show-a-progress-dialog-while-html-page-is-page-webview/9171581 # 9171581 –

Répondre

1
public class MainActivity extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     final ProgressBar progress = (ProgressBar) findViewById(R.id.progress); 

     WebView webView = (WebView) findViewById(R.id.webview); 
     webView.getSettings().setJavaScriptEnabled(true); 
     webView.setWebViewClient(new WebViewClient() { 
      @Override 
      public boolean shouldOverrideUrlLoading(final WebView view, final String url) { 
       return false; 
      } 

      @Override 
      public void onPageStarted(final WebView view, final String url, final Bitmap favicon) { 
       progress.setVisibility(View.VISIBLE); 
       super.onPageStarted(view, url, favicon); 
      } 

      @Override 
      public void onPageFinished(final WebView view, final String url) { 
       progress.setVisibility(View.GONE); 
       super.onPageFinished(view, url); 
      } 
     }); 

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

Et R.layout.activity_main:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <WebView 
     android:id="@+id/webview" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" /> 

    <ProgressBar 
     android:id="@+id/progress" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:visibility="gone" 
     android:layout_centerInParent="true"/> 
</RelativeLayout> 
5

Avant d'appeler la fonction loadData(), juste essayer de montrer ProgressDialog ou mettre ProgressBar à l'intérieur de la mise en page.

Et dans le WebViewClient, il suffit de rejeter() ProgressDialog ou rendre le ProgressBar invisible.

par exemple:

// when finish loading page 
public void onPageFinished(WebView view, String url) { 
     if(mProgress.isShowing()) { 
      mProgress.dismiss(); 
     } 
} 

Pour votre information, appelez loadData() ou loadURL() seulement après que vous avez terminé avec paramètre client Web.

vérifier cet exemple: Load WebView with ProgressDialog

+0

'WebChromeClient class' n'a pas de méthode onPageFinished() à la place 'WebViewClient' – Yuvi

+1

@Yuvi désolé mon erreur, corrigée. ** vérifier le lien d'exemple **. –

+0

Toujours Vous avez écrit 'WebClient' c'est' WebViewClient' http://developer.android.com/reference/android/webkit/WebViewClient.html#onPageFinished(android.webkit.WebView, java.lang.String) – Yuvi

3

S'il vous plaît essayer le code suivant,

ProgressDialog progDailog = ProgressDialog.show(context,"Process ", "Loading Data...",true,true); 

new Thread (new Runnable() 
{ 
    public void run() 
    { 
     // your data loading code goes here 
    } 
}).start(); 

Handler progressHandler = new Handler() 
{ 

    public void handleMessage(Message msg1) 
    { 

     progDailog.dismiss(); 
     } 
} 
Questions connexes