Eclipse Webview mit Progressbar komme nicht weiter :(

  • Antworten:12
Lukas R.
  • Forum-Beiträge: 180

03.04.2014, 20:37:49 via Website

Hallo Leute
Folgendes:
Ich habe einpaar tabs die mit fragments laufen und in 1nem tab habe ich eine webview die einwandfrei funktioniert ....... nur möchte ich dass befor die seite kommt ein ladefenster ist wie es jeder kennt bis die seite geladen ist .... den code dazu hab ich auch schon geschrieben ..... 1nen für die webview und 1nen für die progressbar .... wie muss ich tun dass wenn das fragment mit der webview aufgerufen wird dazu noch den code für die progressbar nützt ..... oder kann ich einen code in der webviewfragment java zusammen schreiben dass es gar keine 2. java braucht?

Hier die codes

Website.java:

1import android.os.Bundle;
2import android.support.v4.app.Fragment;
3import android.view.LayoutInflater;
4import android.view.View;
5import android.view.ViewGroup;
6
7import android.webkit.WebView;
8import android.webkit.WebViewClient;
9import android.widget.LinearLayout;
10
11
12
13 public class Website extends Fragment {
14
15 private WebView webView;
16 private Bundle webViewBundle;
17
18 @Override
19 public View onCreateView(LayoutInflater inflater, ViewGroup container,
20 Bundle savedInstanceState) {
21
22 LinearLayout ll = (LinearLayout) inflater.inflate(R.layout.webview,
23 container, false);
24
25 webView = (WebView) ll.findViewById(R.id.webView1);
26 webView.setWebViewClient(new WebViewClient());
27 webView.getSettings().setSupportZoom(true);
28 webView.getSettings().setBuiltInZoomControls(true);
29
30
31
32
33 if (webViewBundle == null) {
34 webView.loadUrl("http://www.hak-lienz.tsn.at/");
35 } else {
36 webView.restoreState(webViewBundle);
37 }
38
39 return ll;
40
41 }
42 @Override
43 public void onPause() {
44 super.onPause();
45
46 webViewBundle = new Bundle();
47 webView.saveState(webViewBundle);
48 }
49
50
51
52 }

und hier der code der Progressbar:

Websiteloader.java:

1import android.annotation.SuppressLint;
2import android.app.ProgressDialog;
3import android.content.Context;
4import android.graphics.Bitmap;
5import android.view.View;
6import android.webkit.WebView;
7import android.webkit.WebViewClient;
8
9@SuppressLint("SetJavaScriptEnabled")
10public class Websiteloader extends WebView {
11 private ProgressDialog pgBar = null;
12 private Context ctx;
13 public Websiteloader(Context context) {
14 super(context);
15 this.clearCache(true);
16 this.clearFormData();
17 this.clearHistory();
18 this.getSettings().setJavaScriptEnabled(true);
19 this.getSettings().setUserAgentString(null);
20 this.requestFocus(View.FOCUS_DOWN);
21 this.setWebViewClient(new Websiteloader.CustomWebViewClient());
22
23 this.pgBar = new ProgressDialog(context);
24 this.pgBar.setMessage("Loading...");
25 setCtx(context);
26
27
28 }
29
30 public Context getCtx() {
31 return ctx;
32 }
33
34 public void setCtx(Context ctx) {
35 this.ctx = ctx;
36 }
37
38 private class CustomWebViewClient extends WebViewClient {
39
40 @Override
41 public void onPageStarted(WebView view, String url, Bitmap favicon) {
42 super.onPageStarted(view, url, favicon);
43 if (!Websiteloader.this.pgBar.isShowing()) {
44 Websiteloader.this.pgBar.show();
45 }
46 }
47
48 @Override
49 public void onPageFinished(WebView view, String url) {
50 super.onPageFinished(view, url);
51 if (Websiteloader.this.pgBar.isShowing()) {
52 Websiteloader.this.pgBar.dismiss();
53 }
54 }
55
56 @Override
57 public boolean shouldOverrideUrlLoading(WebView view, String url) {
58 try{
59
60 view.loadUrl(url);
61
62 }catch(Exception ex){
63
64 }
65 return true;
66 }
67
68 }
69
70}

MFG Lukas R.
Programmieren ist nicht nur eine Wissenschaft, sondern auch ein Lifestyle!

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

03.04.2014, 21:09:42 via App

Dein Ansatz musst du überarbeiten.
Egentlich ist es ganz einfach..
Zuerst den lade dielog anzeigen dann in der webview die url laden nen WebClient definieren und in der on finish den dialog wieder löschen.
Dafür brauchst du kene Dialogklasse zumal du eh der dialogklasse icht mitteilen kannst wann die auferufen werden soll und zu welcher webview die finish gehört.
Was meinst du mit dem java file willst du den weglassen oder was?

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Lukas R.
  • Forum-Beiträge: 180

03.04.2014, 21:16:05 via Website

Ok also meinst du dass ich die java mit der progressbar komplett weglassen kann da man den code in 1nem schreiben kann?
Wenn ja dann müsste ich den code für die webview nochmal neu überschreiben dass zuerst die progressbar geladen wird bis die internetseite fertiggeladen ist und dann soll die progressbar weggehen und die website anzeigen?
Da ich ja noch "Anfänger" bin weis ich jetzt nicht sorecht wie ich den code dann schreiben soll habe im internet zwar gesucht aber wie man dass in fragments macht nichts gefunden

MFG Lukas R.
Programmieren ist nicht nur eine Wissenschaft, sondern auch ein Lifestyle!

Antworten
Lukas R.
  • Forum-Beiträge: 180

03.04.2014, 21:16:12 via Website

Kannst du mir denn iwo einen link für einen Beispielcode geben oder iwie erklären?

— geändert am 03.04.2014, 21:19:12

MFG Lukas R.
Programmieren ist nicht nur eine Wissenschaft, sondern auch ein Lifestyle!

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

03.04.2014, 21:51:42 via App

Ob das jetzt in einer Fragment activity gemacht wird oder nicht ist egal.
Hauptsache du schreibst den Code richtig.
Nochmal
1. dialog anzeigen
2. website laden.
3 onfinish wie
rd ausgeführt dort dialog verschwinden lassen

Musst du im inet unter android webview with progressbar suchen.

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Lukas R.
  • Forum-Beiträge: 180

03.04.2014, 22:10:58 via Website

habe jetzt diesen code .... dass problem vor dem ich stehe ich muss den code iwie zu einem fragment machen wie kann ich das machen?

1import android.app.Activity;
2import android.app.ProgressDialog;
3import android.os.Bundle;
4
5import android.view.Window;
6
7
8import android.webkit.WebSettings;
9import android.webkit.WebView;
10import android.webkit.WebViewClient;
11
12
13
14
15
16 public class Website extends Activity {
17
18
19
20 WebView mWeb;
21 ProgressDialog mProgress;
22
23 @Override
24 public void onCreate(Bundle savedInstanceState) {
25 super.onCreate(savedInstanceState);
26 // no need to use title bar
27 requestWindowFeature(Window.FEATURE_NO_TITLE);
28 // set webview as main content only
29 mWeb = new WebView(this);
30 setContentView(mWeb);
31 // set Javascript
32 WebSettings settings = mWeb.getSettings();
33 settings.setJavaScriptEnabled(true);
34 // the init state of progress dialog
35 mProgress = ProgressDialog.show(this, "Loading", "Please wait for a moment...");
36
37 // add a WebViewClient for WebView, which actually handles loading data from web
38 mWeb.setWebViewClient(new WebViewClient() {
39 // load url
40 public boolean shouldOverrideUrlLoading(WebView view, String url) {
41 view.loadUrl(url);
42 return true;
43 }
44
45 // when finish loading page
46 public void onPageFinished(WebView view, String url) {
47 if(mProgress.isShowing()) {
48 mProgress.dismiss();
49 }
50 }
51 });
52 // set url for webview to load
53 mWeb.loadUrl("http://www.hak-lienz.tsn.at/");
54 }
55 }

MFG Lukas R.
Programmieren ist nicht nur eine Wissenschaft, sondern auch ein Lifestyle!

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

04.04.2014, 06:52:19 via App

Da musst du von Fragment Layout erben und dann in die oncreate view ein code schreiben.
Zusetzlich solltest du die webview mittesl findview by id holen und nicht neu über den context erstellen

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Lukas R.
  • Forum-Beiträge: 180

04.04.2014, 11:30:47 via App

also extends FragmentActivity oder nur extends Fragment????

OK dass mit der webview weis ich schon wie du meinst

MFG Lukas R.
Programmieren ist nicht nur eine Wissenschaft, sondern auch ein Lifestyle!

Antworten
Michele
  • Forum-Beiträge: 1.525

04.04.2014, 13:04:48 via Website

Kommt drauf an.
Ich habe Fragment bei mir.


Verstehe aber irgendwie dein Problem gerade nicht.:D


LG

— geändert am 04.04.2014, 13:17:58

Antworten
Lukas R.
  • Forum-Beiträge: 180

04.04.2014, 14:17:29 via App

mein Problem ist dass ich eine webview mit einen ladebalken normal programmieren kann aber keinen plan hab wie man dass in einem Fragment schreiben muss ..... dass hab ich in einem Fragment noch nie gemacht .....

MFG Lukas R.
Programmieren ist nicht nur eine Wissenschaft, sondern auch ein Lifestyle!

Antworten
Michele
  • Forum-Beiträge: 1.525

04.04.2014, 14:26:28 via Website

Du schreibst das gleich wie sonst auch.

Zeige dir mal ein Teil von meinem Code:

1public class Test extends Fragment {
2
3 public static WebView webView;
4
5 @Override
6 public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
7
8 View rootView = inflater.inflate(R.layout.test, container, false);
9
10 webView = (WebView)rootView.findViewById(R.id.webView);
11 webView.getSettings().setJavaScriptEnabled(true);
12 webView.getSettings().setLoadsImagesAutomatically(true);
13 webView.getSettings().setUseWideViewPort(true);
14 webView.getSettings().setLoadWithOverviewMode(true);
15
16 webView.getSettings().setBuiltInZoomControls(true);
17 webView.getSettings().setDisplayZoomControls(false);
18 webView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);
19
20 webView.setWebViewClient(new WebViewClient() {
21 public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
22
23 }
24 });
25 webView.setWebViewClient(new WebViewClient(){
26 public void onPageFinished(WebView view, String url) {
27 Toast.makeText(activity, "Geladen", Toast.LENGTH_SHORT).show();
28
29 }
30 });
31
32 webView.loadUrl("DEINEURL");
33
34 return rootView;
35 }


LG

— geändert am 04.04.2014, 14:26:55

Antworten
Lukas R.
  • Forum-Beiträge: 180

04.04.2014, 14:32:39 via App

danke und in der container.XML wie soll die aussehen??

MFG Lukas R.
Programmieren ist nicht nur eine Wissenschaft, sondern auch ein Lifestyle!

Antworten
Lukas R.
  • Forum-Beiträge: 180

09.04.2014, 19:26:06 via Website

So nun habe ich einen Code der eig bei Fragmente gehen sollte .... doch diesesmal kommt bei der zeile mit "onPageStarted" der Error:
The method onPageStarted(WebView, String) from the type new WebViewClient(){} is never used locally!

Was hat dass denn jetzt schon wieder zu bedeuten?

Hier der Code:

1package com.schule.hakhas;
2
3
4
5
6
7import android.app.ProgressDialog;
8import android.os.Bundle;
9
10import android.support.v4.app.Fragment;
11
12import android.view.LayoutInflater;
13import android.view.View;
14import android.view.ViewGroup;
15
16import android.webkit.WebView;
17import android.webkit.WebViewClient;
18
19
20
21
22
23
24public class Website extends Fragment {
25
26 public static WebView webView;
27 private ProgressDialog progressBar;
28
29
30
31 @Override
32 public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
33
34 View rootView = inflater.inflate(R.layout.webview, container, false);
35
36 webView = (WebView)rootView.findViewById(R.id.webView1);
37 webView.getSettings().setJavaScriptEnabled(true);
38 webView.getSettings().setLoadsImagesAutomatically(true);
39 webView.getSettings().setUseWideViewPort(true);
40 webView.getSettings().setLoadWithOverviewMode(true);
41
42 webView.getSettings().setBuiltInZoomControls(true);
43 webView.getSettings().setDisplayZoomControls(false);
44 webView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);
45
46
47
48
49
50 progressBar = ProgressDialog.show(getActivity(), "Hak/Has", "Wird geladen.....");
51
52 webView.setWebViewClient(new WebViewClient() {
53 void onPageStarted(WebView view, String url ) {
54 progressBar.show();
55 }
56
57 public void onPageFinished(WebView view, String url) {
58
59 if (progressBar.isShowing()) {
60 progressBar.dismiss();
61 }
62 }
63
64
65 });
66
67
68
69 webView.loadUrl("http://www.hak-lienz.tsn.at/");
70
71return rootView;
72}
73
74}

MFG Lukas R.
Programmieren ist nicht nur eine Wissenschaft, sondern auch ein Lifestyle!

Antworten