studio programacion móviles maximizar libros deshabilitar desarrollo curso cerrar boton aplicaciones java android webview progressdialog dismiss

java - programacion - ¿Cómo desactivo mi diálogo de progreso después de cargar la vista web?



manual de programacion android pdf (6)

Si simplemente desea mostrar el progreso antes de cargar la página web en WebView. Simplemente puede solicitar el progreso de la función de ventana como

getWindow().requestFeature(Window.FEATURE_PROGRESS);

antes de setContentView(R.layout.blahblah);

y mostrar su progreso en onProgressChanged como

final Activity context= this; webview.setWebChromeClient(new WebChromeClient() { public void onProgressChanged(WebView webView, int progress) { activity.setProgress(progress * 1000); } });

Y si desea agregar su propio ProgressDialog, utilice WebviewClient

webView.setWebViewClient(new WebViewClient() { ProgressDialog rogressDialog ; @Override public void onPageStarted(WebView view, String url, Bitmap bitmap) { progressDialog = ProgressDialog.show(context, "Loading...", "Please wait...");//where context = YourActivity.this; super.onPageStarted(view, url, bitmap); } @Override public void onPageFinished(WebView view, String url) { progressDialog .dismiss(); super.onPageFinished(view, url); } }); webView.loadUrl(url);

¿Qué necesito para mi código para que el cuadro de diálogo cierre dismiss() después de cargar la vista web?

public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); CookieSyncManager.createInstance(this); CookieSyncManager.getInstance().startSync(); webview = (WebView) findViewById(R.id.webview); webview.setWebViewClient(new homeClient()); webview.getSettings().setJavaScriptEnabled(true); webview.getSettings().setPluginsEnabled(true); webview.loadUrl("http://google.com"); ProgressDialog pd = ProgressDialog.show(Home.this, "", "Loading. Please wait...", true); }

He intentado

public void onPageFinshed(WebView view, String url){ pd.dismiss(); }

No funcionó


¿Cómo está accediendo a pd onPageFinshed() ? (¿Y está seguro de que se llama cuando la página se carga?)

En su onCreate() , intente pasar pd a su homeClient para que homeClient pueda ocuparse de homeClient el diálogo.

Su homeClient debería verse así:

private class homeClient extends WebViewClient { private ProgressDialog pd; public homeClient(ProgressDialog pd) { this.pd = pd; } @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); return true; } @Override public void onPageFinished (WebView view, String url) { if (pd.isShowing()) { pd.dismiss(); } } }

En su onCreate() :

ProgressDialog pd = ProgressDialog.show(Fbook.this, "", "Loading. Please wait...", true); webview.setWebViewClient(new homeClient(pd));


: o webview.setWebViewClient (new homeClient ()); homeClient () ????

prueba esto

... ... ... webview = (WebView) findViewById(R.id.webview); webview.setWebViewClient(new WebViewClient() { public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); return true; } public void onPageFinished(WebView view, String url) { if (progressBar.isShowing()) { progressBar.dismiss(); } } webview.loadUrl("http://www.google.com"); }

Actualización :: este es un buen ejemplo.

Android WebView y la solución de progreso indeterminante


@Jorgesys esto no es 100% exacto. Si tiene varios iframes en una página, tendrá múltiples onPageFinished (y onPageStarted). Y si tiene varias redirecciones, también puede fallar. Este enfoque creo que resuelve todos los problemas:

boolean loadingFinished = true; boolean redirect = false; mWebView.setWebViewClient(new WebViewClient() { @Override public boolean shouldOverrideUrlLoading(WebView view, String urlNewString) { if (!loadingFinished) { redirect = true; } loadingFinished = false; webView.loadUrl(urlNewString); return true; } @Override public void onPageStarted(WebView view, String url) { loadingFinished = false; //SHOW LOADING IF IT ISNT ALREADY VISIBLE } @Override public void onPageFinished(WebView view, String url) { if(!redirect){ loadingFinished = true; } if(loadingFinished && !redirect){ //HIDE LOADING IT HAS FINISHED } else{ redirect = false; } } });


Esto esta bien.

public class WordActivity extends Activity { private WebView webview; private ProgressDialog progressDialog; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.webview); Bundle objetbunble = this.getIntent().getExtras(); webview = (WebView) findViewById(R.id.webview); final Activity activity = this; webview.getSettings().setJavaScriptEnabled(true); webview.setWebViewClient(new WebViewClient() { public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); return true; } public void onLoadResource (WebView view, String url) { if (progressDialog == null) { progressDialog = new ProgressDialog(activity); progressDialog.setMessage("Chargement en cours"); progressDialog.show(); } } public void onPageFinished(WebView view, String url) { if (progressDialog.isShowing()) { progressDialog.dismiss(); progressDialog = null; } } }); webview.loadUrl("http://www.example.com"); } }


wv1.setWebViewClient(new WebViewClient() { public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { Toast.makeText(Entertainment.this, description, Toast.LENGTH_SHORT).show(); } @Override public void onPageStarted(WebView view, String url, Bitmap favicon) { progressDialog.show(); } @Override public void onPageFinished(WebView view, String url) { progressDialog.dismiss(); String webUrl = wv1.getUrl(); } }); wv1.loadUrl(url);

El código anterior mostrará un diálogo de progreso para cada enlace entrante al que navegue en la vista web.