2012-03-28 3 views
1

Ich bin Neuling in Android-Entwicklung.Wie zeigt ProgressBar während des Wartens auf HttpRespons?

Ich habe eine Android-Web-App entwickelt.Wenn ich auf Untermenüs oder Links von dieser Webseite klicken, werden verwandte Artikel von der Website mit RSS-Feeds abgerufen, die im XML-Format ist.

Dieser Vorgang benötigt etwas Zeit zum Laden einer Seite. Ich möchte den Fortschrittsbalken anzeigen, während der Inhalt geladen wird.

Ich habe folgenden Code versucht:

@Override 
public void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    dialog = ProgressDialog.show(this,"","Loading..."); 
    dialog.setProgressStyle(ProgressDialog.STYLE_SPINNER); 

    this.requestWindowFeature(Window.FEATURE_NO_TITLE);//to remove title bar 
    this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); 
    //to remove notification bar 
    setContentView(R.layout.main); 
    wv = (WebView)findViewById(R.id.webview); 
    wv.getSettings().setJavaScriptEnabled(true); 
    wv.setBackgroundColor(0); 
    wv.setWebViewClient(new WebViewClient() {}); 
    wv.loadUrl("file:///android_asset/HomePage.html"); 

} 
@Override 
protected void onSaveInstanceState(Bundle outState) 
{ 
    super.onSaveInstanceState(outState); 
    // Save the state of the WebView 
    wv.saveState(outState); 
} 
@Override 
protected void onRestoreInstanceState(Bundle savedInstanceState) 
{ 
    super.onRestoreInstanceState(savedInstanceState); 
    // Restore the state of the WebView 
    wv.restoreState(savedInstanceState); 
} 


public class mywebclient extends WebViewClient{ 

    @Override 
    public void onPageStarted(WebView view, String url, Bitmap favicon) { 
     // TODO Auto-generated method stub 
     super.onPageStarted(view, url, favicon); 
     dialog.show(); 
    } 

    @Override 
    public boolean shouldOverrideUrlLoading(WebView view, String url) { 
     // TODO Auto-generated method stub 
     view.loadUrl("file:///android_asset/HomePage.html"); 
     return true; 
    } 

    @Override 
    public void onPageFinished(WebView view, String url) { 
     // TODO Auto-generated method stub 
     super.onPageFinished(view, url); 
     dialog.dismiss(); 

    } 

} 

} 

Es Fortschrittsbalken zeigt nur auf Homepage und es hat auch nicht zu entlassen, nachdem Seite vollständig geladen ist.

Was kann ich tun, um die Fortschrittsleiste anzuzeigen, wenn Untermenüs oder Links von dieser Webseite angeklickt werden? Danke im Voraus.

Antwort

3

Versuchen Sie diesen Code

package your.app; 

import android.app.Activity; 
import android.app.ProgressDialog; 
import android.os.Bundle; 
import android.view.Window; 
import android.webkit.WebChromeClient; 
import android.webkit.WebView; 
import android.webkit.WebViewClient; 

public class Main extends Activity { 

WebView webview; 

final Activity activity = this; 

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 
    this.getWindow().requestFeature(Window.FEATURE_PROGRESS); 

    setContentView(R.layout.main); 

    getWindow().setFeatureInt(Window.FEATURE_PROGRESS, 
      Window.PROGRESS_VISIBILITY_ON); 

    webview = (WebView) findViewById(R.id.webview); 
    webview.getSettings().setJavaScriptEnabled(true); 

    final ProgressDialog progressDialog = new ProgressDialog(activity); 
    progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); 
    progressDialog.setMessage("Loading...please wait"); 
    progressDialog.setCancelable(true); 

    webview.setWebViewClient(new WebViewClient() { 

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

    }); 

    webview.loadUrl("http://www.mysite.com/mobile/"); 

    // WebChromeClient give progress etc info 
    webview.setWebChromeClient(new WebChromeClient() { 

     public void onProgressChanged(WebView view, int progress) { 

      progressDialog.show(); 
      progressDialog.setProgress(0); 
      activity.setProgress(progress * 1000); 

      progressDialog.incrementProgressBy(progress); 

      if (progress == 100 && progressDialog.isShowing()) 
       progressDialog.dismiss(); 
     } 
    }); 

} 

}

Hinweis: Vergessen Sie nicht, Ihre Manifest-Datei für den Internetzugang ändern

Weitere können u Funktionalität hinzufügen für Back Button überprüfen Internet-Verbindung ausblenden Titel Bar Vollbild anzeigen

+0

Vielen Dank a Bove Beispiel ist wirklich gut und es löst mein Problem ... Aber es gibt ein anderes Problem eine der inneren Seite enthält Java-Skript, die, wenn Sie diese Seite neu schreiben. Für diesen Fortschrittsbalken wird nicht angezeigt. Gibt es eine Methode, die beim erneuten Laden der Seite aufgerufen werden kann, um diesen Fortschrittsbalken anzuzeigen? – Ashutosh

+0

keine Idee .. aber ich benutze pageloading Skript in meinem HTML –

+0

Dose Fortschrittsbalken sichtbar, wenn Skript ausgeführt wird? – Ashutosh