Come eseguire la mia dialogo di avanzamento licenziare dopo aver caricato WebView?
-
17-09-2020 - |
Domanda
A cosa servono al mio codice per effettuare la finestra di dialogo dismiss()
dopo aver caricato il WebView?
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);
}
.
Ho provato
public void onPageFinshed(WebView view, String url){
pd.dismiss();
}
.
non ha funzionato.
Soluzione
: o Webview.setWebViewClient (New HomeClient ()); HomeClient () ????
Prova questo
...
...
...
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");
}
.
Aggiornamento :: Questo è un buon esempio.
Altri suggerimenti
Questo è OK.
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");
}
}
. @Jorgesys Questo non è accurato al 100%.Se hai diversi iframe in una pagina avrai più onpaggiunto (e onpagestato).E se hai diversi reindirizzamenti, può anche fallire.Questo approccio Penso che risolva tutti i problemi:
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;
}
}
});
. Come stai accedendo a pd
in onPageFinshed()
?(E sei sicuro che è effettivamente chiamato quando la pagina carica?)
Nel onCreate()
, prova a passare pd
al homeClient
in modo che homeClient
possa prendersi cura di respingere la finestra di dialogo.
Il tuo homeClient dovrebbe assomigliare a questo:
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();
}
}
}
.
nel tuo onCreate()
:
ProgressDialog pd = ProgressDialog.show(Fbook.this, "",
"Loading. Please wait...", true);
webview.setWebViewClient(new homeClient(pd));
. .Se si desidera semplicemente mostrare i progressi prima del caricamento della pagina Web in WebView.Puoi semplicemente richiedere la finestra Finestra di avanzamento della finestra come
getWindow().requestFeature(Window.FEATURE_PROGRESS);
.
PRIMA setContentView(R.layout.blahblah);
e mostralo progredire in onprogresschanged come
final Activity context= this;
webview.setWebChromeClient(new WebChromeClient()
{
public void onProgressChanged(WebView webView, int progress)
{
activity.setProgress(progress * 1000);
}
});
.
E se vuoi aggiungere il tuo ProgressDialog, quindi utilizzare 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);
. 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);
.
Il codice sopra mostrerà una dialogo di avanzamento per ogni collegamento in arrivo che navighi in WebView.