Ajouter un délai de dialogue Progression
-
25-09-2019 - |
Question
Je veux faire une boîte de dialogue de progression factice apparaissent pendant 2 ou 3 secondes. Il ne fait pas autre chose que de dire la détection. J'ai le code:
ProgressDialog dialog = ProgressDialog.show(this, "", "Detecting...",
true);
dialog.show();
dialog.dismiss();
Mais qu'est-ce que je mets entre le spectacle et le licenciement pour avoir apparaître la boîte de dialogue pendant quelques secondes? Merci!
La solution
La manière correcte - il ne bloque pas votre thread principal, donc reste l'interface utilisateur réactive:
dialog.show();
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
public void run() {
dialog.dismiss();
}
}, 3000); // 3000 milliseconds delay
Autres conseils
progress.setProgress(100);
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
public void run() {
pdialog.dismiss();
}}, 3000);
Vous pouvez également utiliser CountDownTimer
d'Android qui est beaucoup plus efficace que toute autre solution affichée et soutenir également feux sur intervalle régulier grâce à sa méthode onTick()
.
Jetez un oeil à cet exemple,
new CountDownTimer(3000, 1000) {
public void onTick(long millisUntilFinished) {
// You don't need anything here
}
public void onFinish() {
dialog.dismiss();
}
}.start();
Vous pouvez faire quelque chose comme ceci:
new AsyncTask<Void, Void, Void>
{
ProgressDialog dialog = new ProgressDialog(MainActivity.this);
@Override
protected void onPreExecute() {
super.onPreExecute();
dialog.setTitle("Please wait");
dialog.setMessage("Preparing resources...");
dialog.setCancelable(false);
dialog.show();
}
@Override
protected Void doInBackground(Void... params) {
try{
Thread.sleep(3000);
}
catch(Exception e)
{
e.printStackTrace();
}
}
@Override
protected void onPostExecute(Void aVoid)
{
super.onPostExecute(aVoid);
if (dialog!=null && dialog.isShowing())
{
dialog.dismiss();
}
}
}.execute();
Rien ne vient rejeter et montrer .. le temps selon vous. Par exemple dialogue affiche avant l'accès au serveur et il rejettera obtenir des moyens de résultat
dialog.show();
ServerCall();
dialog.close();
Si vous avez besoin délai vide signifie utiliser demandâmes CountDownTimer entre ce ..
Dans le cas où quelqu'un cherche Xamarin.Android
( en utilisant C # ) solution ( de la réponse Peter Knego ), voici comment:
new Handler().PostDelayed(() => {
dialog.dismiss();
}, 1000);