web-dev-qa-db-fra.com

Android Barre de progression DialogFragment

J'ai cherché partout et je ne trouve pas de solution à ce problème.

Fondamentalement, j'ai un écran de connexion et j'essaie d'obtenir un spinner de progression à afficher pendant qu'il se connecte au serveur (via un thread), puis le fermer après la connexion réussie. Elle doit fonctionner tout en changeant d'orientations.

J'utilise DialogFragment avec le Android pour créer une barre de progression (ne trouve aucune documentation à ce sujet, niquement pour la boîte de dialogue de base\alert =) parce que showDialog() est obsolète maintenant. En ce moment, je montre juste une boîte de message personnalisée comme spinner de connexion.

En résumé:

  • Comment configurer un spinner Progress avec DialogFragment.
  • Comment puis-je le supprimer dans un autre thread après des changements d'orientation.
32
Jon

Je sais que c'est une vieille question mais je veux partager une bien meilleure solution pour cela

Selon Android Development Protip:

"Arrêtez d'utiliser ProgressDialog, les indicateurs en ligne sont votre ami"

Comme Roman Nurik déclare :

enter image description here

Celui-ci est rapide. Arrêtez d'utiliser ProgressDialog et d'autres indicateurs de chargement modal. Ils sont extrêmement perturbateurs et ennuyeux, surtout lorsque:

  • Vous en voyez un à chaque fois que vous changez d'onglet.

  • Vous ne pouvez pas vous retirer d'eux.

  • Ils disent "Veuillez patienter." Non merci, je préfère simplement désinstaller.

Soit afficher des indicateurs de chargement en ligne avec votre contenu (par exemple http://developer.Android.com/training/animation/crossfade.html ) ou mieux encore, charger de petites quantités de données en arrière-plan afin que vous minimiser la nécessité d'afficher même un indicateur de chargement.

Plus d'informations sur les progrès et l'activité dans les directives de conception .

20
LOG_TAG

Pour afficher un spinner de progression, remplacez simplement DialogFragment.onCreateDialog () dans votre fragment de dialogue comme celui-ci (pas besoin de remplacer onCreateView()):

@Override
public Dialog onCreateDialog(final Bundle savedInstanceState) {
    final ProgressDialog dialog = new ProgressDialog(getActivity());
    //
    dialog.setTitle(R.string.login_title);
    dialog.setMessage(getString(R.string.login_message));
    dialog.setIndeterminate(true);
    dialog.setCancelable(false);
    // etc...
    return dialog;
}

En ce qui concerne le rejet de ce fragment de boîte de dialogue ailleurs, vous devrez obtenir FragmentManager (de l'intérieur de votre prochain FragmentActivity ou Fragment) et appeler popBackStack() dessus (si vous ne faites pas d'autre transaction de fragment entre-temps).

S'il y a plus d'étapes/de transactions de fragments entre votre fragment de dialogue de progression et l'activité suivante, vous aurez probablement besoin de l'une des autres méthodes popBackStack(...) qui prennent un ID ou une balise pour tout afficher jusqu'à votre fragment de dialogue de progression. la pile.

60
Philipp Reichart