ProgressDialog Frage

  • Antworten:7
Alexander R.
  • Forum-Beiträge: 1.148

07.09.2010, 21:06:27 via Website

Ich habe eine WebView und moechte nun ueber einen ProgressDialog den Fortschritt machen...

Geht ja folgender weise:

1ProgressDialog load = new ProgressDialog(this);
2load.setTitle("Laden");
3load.setMessage("Laden. Bitte Warten... ");
4load.setIndeterminate(true);
5load.show();
6webview.loadurl("www.google.de");
7load.dismiss();

leider verschwindet die animation immer bevor die seite vollstaendig geladen ist

hoffe ihr koennt mir helfen

Gruß Alexander

Antworten
Tobias E.
  • Forum-Beiträge: 180

07.09.2010, 22:30:42 via Website

loadURL started den Ladevorgang soweit ich weis in einem seperaten Thread. In den Entwickler-Docs zu WebView gibt's ein Beispiel wie man den Ladevorgang abfragen kann:

1// Let's display the progress in the activity title bar, like the
2 // browser app does.
3 getWindow().requestFeature(Window.FEATURE_PROGRESS);
4
5 webview.getSettings().setJavaScriptEnabled(true);
6
7 final Activity activity = this;
8 webview.setWebChromeClient(new WebChromeClient() {
9 public void onProgressChanged(WebView view, int progress) {
10 // Activities and WebViews measure progress with different scales.
11 // The progress meter will automatically disappear when we reach 100%
12 activity.setProgress(progress * 1000);
13 }
14 });
15 webview.setWebViewClient(new WebViewClient() {
16 public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
17 Toast.makeText(activity, "Oh no! " + description, Toast.LENGTH_SHORT).show();
18 }
19 });
20
21 webview.loadUrl("http://slashdot.org/");

Antworten
Alexander R.
  • Forum-Beiträge: 1.148

08.09.2010, 21:17:13 via Website

Kannst du oder ihr mir erklaeren was an meinem falsch ist oder wie ich es zum laufen bringen kann

1ProgressDialog load = new ProgressDialog(this);
2load.setTitle("Laden");
3load.setMessage("Laden. Bitte Warten... ");
4load.setIndeterminate(true);
5load.show();
6webview.loadurl("www.google.de");
7load.dismiss();

Gruß Alexander

Antworten
San Blarnoi
  • Forum-Beiträge: 2.545

09.09.2010, 00:39:23 via Website

Wie Tobias schon sagte, kehrt loadurl() direkt zurück und somit wird dein Dialog direkt wieder geschlossen;
bei deiner Vorgehensweise gehört das dismiss() nach WebViewClient.onPageFinished()

Antworten
Alexander R.
  • Forum-Beiträge: 1.148

09.09.2010, 22:19:36 via Website

Habe es folgender massen:

1private WebView webview;
2
3 ProgressDialog load = new ProgressDialog(this);
4 load.setTitle("Laden");
5 load.setMessage("Laden. Bitte Warten... ");
6 load.setIndeterminate(true);
7 load.show();
8
9 webview.loadUrl("http://google.de/");
10 WebViewClient.onPageFinished();
11 load.dismiss();

Fehler:

The method onPageFinished(WebView, String) in the type WebViewClient is not applicable for the arguments ().

Gruß Alexander

Antworten
San Blarnoi
  • Forum-Beiträge: 2.545

10.09.2010, 00:21:18 via Website

Ich werde wohl nie verstehen, warum manche hier zwar Entwickler sein wollen, aber gleichzeitig nicht bereit sind, die ihnen gegebenen Hinweise dann selber zu recherchieren...
Wenn du einfach nur blind irgendwas kopierst, dann
- wirst du nie verstehen, wie die Dinge (und insbesondere dein eigenes Programm) funktionieren
- darfst du dich nicht wundern, wenn der eingefügte Text kein echter Code ist und darum nicht funktioniert

http://developer.android.com/intl/zh-CN/reference/android/webkit/WebView.html

Jetzt klarer?

Sorry das es gerade dich trifft, aber ab und zu muss ich das halt mal loswerden.

Manuel Wenner

Antworten
Alexander R.
  • Forum-Beiträge: 1.148

10.09.2010, 00:55:20 via Website

Naja man muss nur suchen^^

1final Activity activity = this;
2
3 final AlertDialog alertDialog = new AlertDialog.Builder(this).create();
4
5 progressBar = ProgressDialog.show(this, "Loading", "Loading...");
6
7 webview.setWebViewClient(new WebViewClient() {
8 public boolean shouldOverrideUrlLoading(WebView view, String url) {
9 Log.i(TAG, "Processing webview url click...");
10 view.loadUrl(url);
11 return true;
12 }
13
14 public void onPageFinished(WebView view, String url) {
15 Log.i(TAG, "Finished loading URL: " +url);
16 if (progressBar.isShowing()) {
17 progressBar.dismiss();
18 }
19 }
20
21 public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
22 Log.e(TAG, "Error: " + description);
23 Toast.makeText(activity, description, Toast.LENGTH_SHORT).show();
24 alertDialog.setTitle("Error");
25 alertDialog.setMessage(description);
26 alertDialog.setButton("OK", new DialogInterface.OnClickListener() {
27 public void onClick(DialogInterface dialog, int which) {
28 return;
29 }
30 });
31 alertDialog.show();
32 }
33 webview.loadUrl("http://google.de");
34 });

— geändert am 10.09.2010, 17:45:44

Gruß Alexander

Antworten
Alexander R.
  • Forum-Beiträge: 1.148

10.09.2010, 17:45:54 via Website

Nun schaffe ich es zumindest es anzeigen zu lassen nur öffnet sich nun die webseite nicht (wird nicht angezeigt):

1package de.progress.app;
2
3import android.app.*;
4import android.util.Log;
5import android.view.*;
6import android.webkit.*;
7import android.widget.*;
8import android.content.*;
9import android.app.Activity;
10import android.os.Bundle;
11
12public class Progress extends Activity {
13 private static final int AKTUALISIEREN = 0;
14 private static final int BEENDEN = 1;
15 private WebView webview;
16 private ProgressDialog progressBar;
17 private static final String TAG = "Main";
18
19 //Zoom
20 private static final FrameLayout.LayoutParams ZOOM_PARAMS =
21 new FrameLayout.LayoutParams(
22 ViewGroup.LayoutParams.FILL_PARENT,
23 ViewGroup.LayoutParams.WRAP_CONTENT,
24 Gravity.BOTTOM);
25 //Zoom
26
27 /** Called when the activity is first created. */
28 @Override
29 public void onCreate(Bundle savedInstanceState) {
30 super.onCreate(savedInstanceState);
31
32 webview = new WebView(this);
33 setContentView(webview);
34 webview.getSettings().setJavaScriptEnabled(true);
35 webview.getSettings().setPluginsEnabled(true);
36
37 //Zoom
38 FrameLayout mContentView = (FrameLayout) getWindow().
39 getDecorView().findViewById(android.R.id.content);
40 final View zoom = this.webview.getZoomControls();
41 mContentView.addView(zoom, ZOOM_PARAMS);
42 zoom.setVisibility(View.GONE);
43 //Zoom
44
45 final Activity activity = this;
46
47 final AlertDialog alertDialog = new AlertDialog.Builder(this).create();
48
49 progressBar = ProgressDialog.show(this, "Loading", "Loading...");
50
51 webview.setWebViewClient(new WebViewClient() {
52 public boolean shouldOverrideUrlLoading(WebView view, String url) {
53 Log.i(TAG, "Processing webview url click...");
54 view.loadUrl(url);
55 return true;
56 }
57
58 public void onPageFinished(WebView view, String url) {
59 Log.i(TAG, "Finished loading URL: " +url);
60 if (progressBar.isShowing()) {
61 progressBar.dismiss();
62 }
63 }
64
65 public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
66 Log.e(TAG, "Error: " + description);
67 Toast.makeText(activity, description, Toast.LENGTH_SHORT).show();
68 alertDialog.setTitle("Error");
69 alertDialog.setMessage(description);
70 alertDialog.setButton("OK", new DialogInterface.OnClickListener() {
71 public void onClick(DialogInterface dialog, int which) {
72 return;
73 }
74 });
75 alertDialog.show();
76 }
77 });
78 webview.loadUrl("http://www.google.de/");
79 }
80}

Gruß Alexander

Antworten