2009-05-23 9 views
24

Sto utilizzando una vista titolo personalizzata e vorrei mostrare/nascondere una barra di avanzamento nella vista Titolo quando un thread sta funzionando.Android - utilizzo di runOnUiThread per eseguire modifiche all'interfaccia utente da una discussione

Questo è XML di mio avviso titolo

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="horizontal" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
> 
    <Button 
     android:id="@+id/image_left_btn" 
     android:layout_width="75dip" 
     android:layout_height="wrap_content" 
     android:text="Back" 
    /> 
    <TextView 
     android:id="@+id/image_title_text" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" 
     android:textSize="20dip" 
     android:textStyle="bold" 
     android:textColor="#fff" 
     android:layout_gravity="center" 
     android:gravity="center" 
     android:paddingLeft="8dip" 
     android:paddingRight="8dip" 
    /> 
    <ProgressBar 
     android:id="@+android:id/progress_small_title" 
     style="?android:attr/progressBarStyleSmall" 
     android:layout_width="75dip" 
     android:layout_height="wrap_content" 
     android:paddingRight="8dip"/> 
</LinearLayout> 

nella mia attività, dopo aver impostato questo come la barra del titolo personalizzato, faccio questo

titleProgress = (ProgressBar)findViewById(R.id.progress_small_title); 
titleProgress.setVisibility(View.INVISIBLE); 

dove titleProgress è oggetto ProgressBar.

Questo è quello che faccio nel mio thread

runOnUiThread(new Runnable() { 
    public void run() { 
     titleProgress.setVisibility(View.VISIBLE); 
    } 
}); 
//long operation here 
runOnUiThread(new Runnable() { 
    public void run() { 
     titleProgress.setVisibility(View.INVISIBLE); 
    } 
}); 

ma non v'è alcun cambiamento alla barra di avanzamento. Non viene mai visualizzato Qualcuno può dirmi cosa c'è di sbagliato nel codice?

È possibile visualizzare la barra di avanzamento del titolo in un titolo personalizzato?

Grazie.

risposta

16

alcune cose da provare:

1) (Questo probabilmente non è vero) Assicurarsi che "titleProgress" è volatile.

2) Provare a lanciare alcuni postInvalidate() o titleProgress.postInvalidate() lì per attivare un nuovo aggiornamento.

3) Hai sacrificato una macchina x486 su un alter che assomiglia ad un gigantesco robot verde? (sto scherzando)

Fammi sapere se quei primi due (e se sei davvero disperato, il terzo) ti portano ovunque.

+3

Già provato i primi due ma non ha aiutato! E io sono disperato, quindi immagino che chiami per 3? ;) – lostInTransit

+0

L'opzione 3) è la soluzione migliore per tutti i problemi ... LOL – Rodrigo

0

provare a cambiare lo stile del ProgressBar a horizonal:

style="?android:attr/progressBarStyleHorizontal" 

L'originale

style="?android:attr/progressBarStyleSmall" 

dà un "progressbar" circolare che non può essere completamente visibile nella barra del titolo.

+0

Ho anche provato con progressBarStyleSmallTitle che dovrebbe inserirsi nella barra del titolo predefinita. Anche questo non mostra. – lostInTransit

1

Il layout è corretto? Hai provato a farlo funzionare prima con un layout verticale? Solo per vedere se la barra di avanzamento è visibile quando avvii la tua attività?

4

utilizzare la comunicazione con i gestori,

  1. eseguire il filo
  2. in run(): è necessario inviare un messaggio al gestore che aggiornerà il ProgressBar (orizzontale ovviamente): handler.sendMessage(handler.obtainMessage());
  3. nella vostra Attività, è necessario eseguire l'override del metodo handleMessage(Message msg): come questo

    handler = new Handler(){ 
        @override 
        public void handleMessage(Message msg) 
        { 
        //here you write the code which will update your progressBar 
        } 
    }; 
    
+0

funziona solo se il tuo thread è incluso nella tua classe di attività. – Miky

Problemi correlati