2011-09-04 29 views
32

Ho cercato ovunque e non riesco a trovare una soluzione a questo problema.Barra di avanzamento Android DialogFragment

Fondamentalmente ho una schermata di accesso e sto cercando di ottenere uno spinner di progresso da mostrare mentre sta accedendo al server (tramite una discussione), e poi lo spegni dopo che l'accesso è andato a buon fine. Deve funzionare cambiando gli orientamenti.

Sto usando DialogFragment con il pacchetto di compatibilità Android per fare una barra di avanzamento (non riesco a trovare alcuna documentazione su di esso, only for basic\alert dialog) perché showDialog() è deprecato ora. In questo momento ho appena mostrato una casella di messaggio personalizzato come uno spinner di accesso.

In sintesi:

  • Come posso impostare un filatore di avanzamento con DialogFragment.
  • Come posso chiuderlo in un altro thread dopo le modifiche di orientamento.

risposta

21

So che questa è vecchia questione, ma voglio condividere molto meglio soluzione per questo

Secondo Android Development Protip:

"Smettere di usare ProgressDialog, indicatori di linea sono tuo amico"

Come romana Nurik states:

enter image description here

Questo è veloce. Smettere di usare ProgressDialog e altri modali caricando gli indicatori . Sono estremamente interruttivo e fastidioso, soprattutto quando :

  • si vede uno ogni volta che si passa le schede.

  • Non puoi tornare indietro.

  • Dicono "Per favore aspetta". No grazie, preferisco semplicemente disinstallare.

    indicatori

In entrambi i caricando in linea con il contenuto (ad esempio http://developer.android.com/training/animation/crossfade.html) o, meglio ancora, caricare piccole quantità di dati in sfondo in modo da ridurre al minimo la necessità di mostrare anche un indicatore di caricamento .

Ulteriori informazioni sui progressi & attività nel numero design guidelines.

+1

Come precauzione, quando si copiano le parole di un altro, è necessario bloccare correttamente qualsiasi cosa si copi da loro, e si deve fornire un link alla fonte originale. –

+0

Abbastanza vero, ma per quanto riguarda i casi in cui non è possibile procedere con l'app fino a quando non viene visualizzato correttamente qualcosa? Perché è possibile aggiornare e salvare i dati solo se la stampa ha avuto successo e, in caso contrario, è necessario dare all'utente la possibilità di riprovare/modificare i dati, ecc. Devo ancora trovare un modo per gestire tutto questo senza mostrare un aspetta lo spinner. – AgentKnopf

+0

@Zainodis nasconde/invisibile la barra di avanzamento inline e usa il Crouton per visualizzare il messaggio di errore, è possibile cambiare il nome del pulsante Stampa in Re-Print. tutto dipende da dove si chiama ShowProgress (true) ShowProgress (false) per mostrare il contenuto. –

59

per mostrare un filatore di avanzamento, solo ignorare DialogFragment.onCreateDialog() nella vostra finestra frammento come questo (non è necessario per superiori 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; 
} 

quanto per respingere quella finestra frammento da qualche altra parte, è necessario per ottenere una sospensione di FragmentManager (dall'interno del tuo prossimo FragmentActivity o Fragment) e chiamare popBackStack() su di esso (se non si esegue alcuna altra transazione di frammento nel frattempo).

Se sono presenti più transazioni di passaggi/frammenti tra il frammento della finestra di dialogo di avanzamento e l'attività successiva, sarà probabilmente necessario uno degli altri metodi popBackStack(...) che accettano un ID o un tag per far saltare tutto al frammento della finestra di dialogo di avanzamento dallo stack .

+1

Hai setTitle due volte, credo che volevi dire, dialog.setMessage (R.string.login_message) – worked

+0

@worked Grazie, ho riparato - non c'è setMessage (int) '' su 'ProgressDialog', però, così Ho dovuto usare 'setMessage (String)'. –

+17

Vorrei aggiungere che il 'DialogFragment' ha un metodo' dismiss' che può essere usato a favore dello schiocco indietro. Basta 'findFragmentByTag', castato in' DialogFragment' e 'dismiss()' – Greyson

Problemi correlati