2009-05-23 14 views
24

Estoy usando una vista de título personalizada y me gustaría mostrar/ocultar una barra de progreso en la vista de título cuando un hilo está funcionando.Android - usando runOnUiThread para hacer cambios de UI desde un hilo

Este es mi punto de vista XML del título

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

En mi actividad, después de establecer esto como la barra de título personalizado, hago esto

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

donde titleProgress es objeto ProgressBar.

Esto es lo que hago en mi hilo

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

pero no hay cambio en la barra de progreso. Nunca se muestra. ¿Alguien puede decirme qué está mal con el código?

¿Es posible mostrar la barra de progreso del título en un título personalizado?

Gracias.

Respuesta

16

algunas cosas para probar:

1) (Esto probablemente no es cierto) Asegúrese de que "titleProgress" es volátil.

2) Intente arrojar unos postInvalidate() o titleProgress.postInvalidate() para desencadenar un redibujado.

3) ¿Ha sacraficiado una máquina x486 en un alter similar a un robot verde gigante? (es broma)

Avísame si esos dos primeros (y si estás realmente desesperado, el tercero) te llevan a algún lado.

+3

¡Ya probé los primeros dos pero no ayudó! Y estoy desesperado, así que supongo que eso requiere 3? ;) – lostInTransit

+0

La opción 3) es la mejor solución para todos los problemas ... LOL – Rodrigo

0

trate de cambiar el estilo de ProgressBar en horizonal:

style="?android:attr/progressBarStyleHorizontal" 

El original

style="?android:attr/progressBarStyleSmall" 

da una "progressbar" circular que no puede ser visto plenamente en la barra de título.

+0

Incluso probé con progressBarStyleSmallTitle, que se supone que cabe en la barra de título predeterminada. Incluso esto no se muestra. – lostInTransit

1

¿Es correcto su diseño? ¿Intentó que esto funcionara primero con un diseño vertical? ¿Solo para ver si la barra de progreso está visible cuando comienzas tu actividad?

4

utilizar la comunicación con los manipuladores,

  1. ejecutar su hilo
  2. en run(): usted debe enviar un mensaje al gestor que se actualizará el progressBar (horizontal, por supuesto): handler.sendMessage(handler.obtainMessage());
  3. en su Actividad, debe sobrescribir el método handleMessage(Message msg): así

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

esto solo funcionará si su hilo está envuelto en su clase de actividad. – Miky

Cuestiones relacionadas