1. Nimm jetzt an unserem 2. ADVENT-Gewinnspiel teil - Alle Informationen findest Du hier!

WebView mit ProgressDialog in Thread?

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von Lilithian, 26.10.2010.

  1. Lilithian, 26.10.2010 #1
    Lilithian

    Lilithian Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    69
    Erhaltene Danke:
    23
    Registriert seit:
    26.10.2010
    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. ^^
     
  2. swordi, 26.10.2010 #2
    swordi

    swordi Gewerbliches Mitglied

    Beiträge:
    3,389
    Erhaltene Danke:
    441
    Registriert seit:
    09.05.2009
    erstelle die progressbar vielleicht in einem dialog.

    dann rufe den dialog ober die onDialog methode auf und das drehen sollte kein problem mehr sein
     
    Lilithian bedankt sich.
  3. Lilithian, 26.10.2010 #3
    Lilithian

    Lilithian Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    69
    Erhaltene Danke:
    23
    Registriert seit:
    26.10.2010
    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: 26.10.2010

Diese Seite empfehlen