Quelle est la meilleure façon d'afficher un spinner de chargement pendant que l'application attend une réponse du serveur?
Cela peut-il être fait par programme? Pour ne pas avoir à ajouter le spinner de chargement dans le fichier xml?
Quelle est la meilleure façon d'afficher un spinner de chargement pendant que l'application attend une réponse du serveur?
Cela peut-il être fait par programme? Pour ne pas avoir à ajouter le spinner de chargement dans le fichier xml?
Réponses:
ProgressDialog est obsolète depuis Android Oreo. Utilisez plutôt ProgressBar
ProgressDialog progress = new ProgressDialog(this);
progress.setTitle("Loading");
progress.setMessage("Wait while loading...");
progress.setCancelable(false); // disable dismiss by tapping outside of the dialog
progress.show();
// To dismiss the dialog
progress.dismiss();
OU
ProgressDialog.show(this, "Loading", "Wait while loading...");
À propos, Spinner a une signification différente dans Android. (C'est comme la liste déroulante de sélection en HTML)
progress.setCancelable(false);
.
ProgressDialog
est obsolète dans Android O developer.android.com/reference/android/app/ProgressDialog.html
ProgressDialog est devenu obsolète depuis le niveau d'API 26 https://developer.android.com/reference/android/app/ProgressDialog.html
J'inclus une ProgressBar dans ma mise en page
<ProgressBar
android:layout_weight="1"
android:id="@+id/progressBar_cyclic"
android:visibility="gone"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:minHeight="40dp"
android:minWidth="40dp" />
et changez sa visibilité en .GONE | .VISIBLE selon le cas d'utilisation.
progressBar_cyclic.visibility = View.VISIBLE
Utilisation ProgressDialog
ProgressDialog.show(Context context, CharSequence title, CharSequence message);
Cependant, cela est considéré comme un anti-pattern aujourd'hui (2013): http://www.youtube.com/watch?v=pEGWcMTxs3I
ProgressDialog
est obsolète dans Android O developer.android.com/reference/android/app/ProgressDialog.html
En fait, si vous attendez une réponse d'un serveur, cela doit être fait par programme. Vous pouvez créer une boîte de dialogue de progression et la fermer, mais là encore, ce n'est pas "la manière Android".
Actuellement, la méthode recommandée consiste à utiliser un DialogFragment :
public class MySpinnerDialog extends DialogFragment {
public MySpinnerDialog() {
// use empty constructors. If something is needed use onCreate's
}
@Override
public Dialog onCreateDialog(final Bundle savedInstanceState) {
_dialog = new ProgressDialog(getActivity());
this.setStyle(STYLE_NO_TITLE, getTheme()); // You can use styles or inflate a view
_dialog.setMessage("Spinning.."); // set your messages if not inflated from XML
_dialog.setCancelable(false);
return _dialog;
}
}
Ensuite, dans votre activité, vous définissez votre gestionnaire de fragments et affichez la boîte de dialogue une fois que l'attente du serveur a commencé:
FragmentManager fm = getSupportFragmentManager();
MySpinnerDialog myInstance = new MySpinnerDialog();
}
myInstance.show(fm, "some_tag");
Une fois que votre serveur a répondu, vous le rejetterez:
myInstance.dismiss()
Rappelez-vous que le progressdialog est un spinner ou une barre de progression selon les attributs, en savoir plus sur le guide de l' API
ProgressDialog
est obsolète dans Android O developer.android.com/reference/android/app/ProgressDialog.html
C'est ainsi que j'ai fait cela afin qu'une seule boîte de dialogue de progression puisse être ouverte à la fois. Basé sur la réponse de Suraj Bajaj
private ProgressDialog progress;
public void showLoadingDialog() {
if (progress == null) {
progress = new ProgressDialog(this);
progress.setTitle(getString(R.string.loading_title));
progress.setMessage(getString(R.string.loading_message));
}
progress.show();
}
public void dismissLoadingDialog() {
if (progress != null && progress.isShowing()) {
progress.dismiss();
}
}
Je devais aussi utiliser
protected void onResume() {
dismissLoadingDialog();
super.onResume();
}
ProgressDialog
est obsolète dans Android O developer.android.com/reference/android/app/ProgressDialog.html