Come licenziare la barra di progresso prima del caricamento utilizzando il pulsante Indietro?
-
28-10-2019 - |
Domanda
Sto usando la barra di avanzamento per la visualizzazione Web. Devo interrompere la barra di avanzamento prima del caricamento della pagina. Premi il pulsante Indietro ma non funziona tra il caricamento.
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.webview);
mWebView = (WebView) findViewById(R.id.webview);
mWebView.getSettings().setJavaScriptEnabled(true);
mWebView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);
final AlertDialog alertDialog = new AlertDialog.Builder(this).create();
progressBar =new ProgressDialog(this);
progressBar.setCancelable(true);
progressBar.show();
mWebView.setWebViewClient(new WebViewClient() {
public boolean shouldOverrideUrlLoading(WebView view, String url) {
Log.i("TEST", "Processing webview url click...");
view.loadUrl(url);
return true;
}
public void onPageFinished(WebView view, String url) {
Log.i("TEST", "Finished loading URL: " +url);
if (progressBar.isShowing()) {
progressBar.dismiss();
}
}
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
Log.e("TEST", "Error: " + description);
Toast.makeText(getApplicationContext(), "Oh no! " + description, Toast.LENGTH_SHORT).show();
alertDialog.setTitle("Error");
alertDialog.setMessage(description);
alertDialog.setButton("OK", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
return;
}
});
alertDialog.show();
}
});
mWebView.loadUrl("http://www.google.com");
}
Per il test del pulsante di schiena lo uso
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {
Toast.makeText(getApplicationContext(),"hi", Toast.LENGTH_LONG).show();
return true;
}
return super.onKeyDown(keyCode, event);
}
Soluzione
Ciao per favore controlla questo
progressBar = new ProgressDialog(this);
progressBar.setCancelable(true);
progressBar.setOnCancelListener(new OnCancelListener() {
public void onCancel(DialogInterface arg0) {
if(progressBar.isShowing())
progressBar.dismiss();
finish();
}
});
progressBar.setMessage("Loading...");
progressBar.show();
Grazie a tutti
Altri suggerimenti
Se fossi in te, userei AsyncTask per caricare i dati dell'URL e mostrare il progresso in mezzo.
- All'inizio, spawn da un thread diverso che recupera il contenuto dell'URL
- Inizia a visualizzare il ProgressDialog
- Quando hai i dati dell'URL che il thread ha restituito, lo caricalo in WebView
- Respingere il progressdialog
Per eseguire cose in un thread diverso, controlla AsyncTask.
Usa multithreading per implementare progressi e apparenza visiva usando il thread di UIWorker
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow