2009-05-23 4 views
24

Ich verwende eine benutzerdefinierte Titelansicht und möchte eine Fortschrittsleiste in der Titelansicht ein-/ausblenden, wenn ein Thread funktioniert.Android - Verwenden von runOnUiThread zum Ausführen von UI-Änderungen aus einem Thread

Das ist mein Titel XML ist nach Ansicht

<?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> 

In meiner Aktivität, nachdem diese als benutzerdefinierte Titelleiste Einstellung, Ich tue dies

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

wo titleProgress ist ProgressBar Objekt.

Dies ist, was ich in meinem Thread tun bar

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

Aber es gibt keine Änderung an den Fortschritt. Es wird nie angezeigt. Kann mir bitte jemand sagen, was mit dem Code nicht stimmt?

Ist es möglich, die Titelleiste in einem benutzerdefinierten Titel anzuzeigen?

Danke.

Antwort

16

paar Dinge zu versuchen:

1) (Dies ist wahrscheinlich nicht) Stellen Sie sicher, "titleProgress" ist flüchtig.

2) Versuchen Sie, ein paar postInvalidate() oder titleProgress.postInvalidate() hinein zu werfen, um eine Neuzeichnung auszulösen.

3) Haben Sie eine x486-Maschine auf einer alten Maschine nachgebaut, die einem riesigen grünen Roboter ähnelt? (nur scherzend)

Lassen Sie mich wissen, wenn diese ersten beiden (und wenn Sie wirklich verzweifelt sind, die dritte) Sie überall hinbringen.

+3

Schon versucht die ersten beiden aber nicht geholfen! Und verzweifelt bin ich also denke ich, dass 3 verlangt? ;) – lostInTransit

+0

Die Option 3) ist die beste Lösung für alle Probleme ... LOL – Rodrigo

0

Versuchen Sie, den Stil der ProgressBar zu horizontalen Wechsel:

style="?android:attr/progressBarStyleHorizontal" 

Die ursprüngliche

style="?android:attr/progressBarStyleSmall" 

gibt eine kreisförmige "progressbar", die vollständig in der Titelleiste zu sehen ist nicht.

+0

Ich probierte sogar mit progressBarStyleSmallTitle, die in die Standardtitelleiste passen soll. Auch das zeigt sich nicht. – lostInTransit

1

Ist Ihr Layout korrekt? Hast du versucht, das zuerst mit einem vertikalen Layout zu arbeiten? Nur um zu sehen, ob der Fortschrittsbalken sichtbar ist, wenn Sie Ihre Aktivität starten?

4

Verwendung Kommunikation mit Handlers,

  1. Thread
  2. in run() ausführen: Sie sollten eine Nachricht an den Handler senden, die die progressBar (horizontal natürlich) aktualisieren: handler.sendMessage(handler.obtainMessage());
  3. in Ihrem Aktivität, sollten Sie die Methode handleMessage(Message msg) überschreiben: so

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

Dies funktioniert nur, wenn Ihr Thread in Ihrer Aktivitätsklasse eingepackt ist. – Miky

Verwandte Themen