WebView mit ProgressDialog in Thread?

L

Lilithian

Ambitioniertes Mitglied
23
Hey,

ich versuche eine WebView mit ProgressDialog zu laden, das ganze funktioniert auch so lange ich es nicht in einem Thread mache.

Wenn ich es in einem Thread versuche, funktioniert es beim ersten mal laden, aber sobald man den Bildschirm kippt gibt es je nachdem ob man das dismissen des ProgressDialogs in den Thread nimmt oder woanders platziert entweder eine Fehlermeldung (view not attached to window manager) oder aber der ProgressDialog verschwindet gar nicht mehr.

Das ist mein Code ohne Thread, der ja soweit funktioniert.
Code:
@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.webview);
        
        wb = (WebView)findViewById(R.id.webview);
        Intent i = this.getIntent();
        final String url = i.getStringExtra("url");        
           
        final ProgressDialog pd = ProgressDialog.show(ShowNews.this, "",
                "News werden geladen...", true);  
        
        class MyWebViewClient extends WebViewClient {
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                view.loadUrl(url);
                return true;
            }  
            
            public void onPageFinished(WebView view, String url) {
                if (pd.isShowing()) {
                    pd.dismiss();
                }    
            }     
        }
        
        wb.setWebViewClient(new MyWebViewClient());
        
        wb.loadUrl(url); 
        
    }
Meine Fragen wären nun, ob es möglich ist das Laden der Url und das Entfernen des ProgressDialogs in einen Thread zu packen und ob das überhaupt Sinn macht oder ob man es direkt so laden sollte. Habe es auch so versucht, den ProgressDialog über onProgressCreate, showProgress und dismissProgress zu zeigen, aber auch das hatte immer die beschriebenen Fehler. Alle Themen die ich bei Google dazu gefunden hab, haben das Problem irgendwie auch nicht gelöst...
Danke schon mal für eure Hilfe. ^^
 
erstelle die progressbar vielleicht in einem dialog.

dann rufe den dialog ober die onDialog methode auf und das drehen sollte kein problem mehr sein
 
  • Danke
Reaktionen: Lilithian
Hey,

danke erstmal für die schnelle Antwort. Ich weiß nicht, ob ich dich richtig verstanden hab, programmiere erst seit einer Woche mit Android. ;)
Habe meinen Code nun wie folgt verändert...
EDIT: Beim Thread musste es natürlich .start() und nicht .run() heißen. Nun zeigt er mir den ProgressDialog, aber wie bereits im ersten Beitrag beschrieben, klappt das nur beim Aufrufen über das Menü. Wenn ich den Bildschirm kippe, wird der ProgressDialog angezeigt, im Hintergrund die WebView geladen, doch auch wenn diese fertig geladen ist verschwindet der ProgressDialog nicht.

Code:
@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.webview);
        
        wb = (WebView)findViewById(R.id.webview);
        Intent i = this.getIntent();
        final String url = i.getStringExtra("url"); 
        
        showDialog(0);
        new Thread (new Runnable () {
            public void run() {
                wb.loadUrl(url);
                while (true) {
                    if (wb.getProgress() == 100) {
                        dismissDialog(0);
                        break;
                    }
                }
            }
        }).start();    
        
        class MyWebViewClient extends WebViewClient {
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                view.loadUrl(url);
                return true;
            }  
        }
        
        wb.setWebViewClient(new MyWebViewClient());        
    }
    
    protected Dialog onCreateDialog(int id) {
        ProgressDialog dialog;
        switch(id) {
        case 0:
            dialog = new ProgressDialog(ShowNews.this);
            dialog.setTitle("");
            dialog.setMessage("News werden geladen...");
            dialog.setCancelable(true);
            dialog.setIndeterminate(true);        
            break;
        default:
            dialog = null;
        }
        return dialog;
    }
 
Zuletzt bearbeitet:

Ähnliche Themen

D
Antworten
23
Aufrufe
2.552
Data2006
D
K
Antworten
3
Aufrufe
1.168
Kapikalaani
K
H
Antworten
0
Aufrufe
933
HoustonWeHaveAProblem
H
Zurück
Oben Unten