2012-05-20 15 views
24

E 'possibile visualizzare l'indicatore di avanzamento (quello che è spettacolo utilizzando requestWindowFeature (Window.FEATURE_INDETERMINATE_PROGRESS) al posto di un pulsante di aggiornamento?indicatore di avanzamento ActionBar e rinfrescare pulsante

L'idea è quella di lavorare come client Gmail fa : Quando non si carica mostra il pulsante di aggiornamento e durante il caricamento mostra lo spinner indeterminato al posto del pulsante di aggiornamento

risposta

0

Si può provare il seguente: mettere sia il pulsante di aggiornamento e lo spinner indeterminato all'interno di uno FrameLayout, quindi i due sono impilati nel piano z, mostra nella stessa posizione sullo schermo, quindi devi solo giocare con la visibilità. Quando vuoi mostrare il pulsante di aggiornamento, imposta la s pinner to invisible e il pulsante to visible. Quando vuoi mostrare lo spinner, impostalo su visibile e il pulsante su invisibile.

+0

So come posso eseguire il layout manualmente ma voglio farlo in actionbar. – lujop

+2

Non è forse la mia risposta utile? Non hai nemmeno commentato. :) – tasomaniac

+0

È possibile scambiare con un intento di trasmissione? – Maxrunner

52

Sì, puoi farlo facilmente in questo modo.

private MenuItem refresh; 
. 
. 
. 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getSupportMenuInflater().inflate(R.menu.options_menu, menu); 

    // refresh menu item 
    refresh = menu.findItem(R.id.refresh_option_item); 

    return super.onCreateOptionsMenu(menu); 
} 

Dovete ottenere la vostra voce di menu di aggiornamento come sopra e poi, è possibile abilitare voce spinning come di seguito:

refresh.setActionView(R.layout.actionbar_indeterminate_progress); 

e quando si operazione è completata, è possibile disattivare gira come di seguito:

refresh.setActionView(null); 

E, infine, il actionbar_indeterminate_progress.xml può essere simile a questo:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="64dp" 
    android:layout_height="wrap_content" 
    android:gravity="center"> 
    <ProgressBar android:layout_width="32dp" 
     android:layout_height="32dp" 
     android:layout_gravity="center" 
     style="?android:attr/indeterminateProgressStyle" /> 
</FrameLayout> 
+1

il problema con questo è che a volte quel riferimento è nullo e otterrai npe. Non so come riprodurlo ma sta succedendo per me. Ho usato il tuo stesso approccio .... – gwa

+0

Non sono successo almeno una volta. Quando viene creato il menu, viene creata una variabile di aggiornamento. L'utente che fa clic su quel pulsante di aggiornamento indica che, naturalmente, è stato creato in precedenza. – tasomaniac

+1

Con alcuni adattamenti funziona come un incantesimo! Ed è migliore della ruota di default. –

Problemi correlati