not - Android: usar runOnUiThread para realizar cambios en la interfaz de usuario desde un hilo
runonuithread(() (5)
¿Su diseño es correcto? ¿Intentaste que esto funcionara primero con un diseño vertical? ¿Solo para ver si la barra de progreso es visible cuando comienza su actividad?
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.
Este es el XML de mi vista de 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 configurar esto como la barra de título personalizada, hago esto
titleProgress = (ProgressBar)findViewById(R.id.progress_small_title);
titleProgress.setVisibility(View.INVISIBLE);
donde titleProgress es el 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.
Intente cambiar el estilo de la barra de progreso a horizontal:
style="?android:attr/progressBarStyleHorizontal"
El original
style="?android:attr/progressBarStyleSmall"
da una "barra de progreso" circular que no se puede ver completamente en la barra de título.
Lo que debe usar en este caso es AsyncTask, consulte http://developer.android.com/reference/android/os/AsyncTask.html
Si no está apuntando a una versión pre-1.5 de Android, tendrá que usar una clase diferente llamada UserTask. Ver http://android-developers.blogspot.com/2009/05/painless-threading.html
Pocas cosas para probar:
1) (Esto probablemente no lo es) Asegúrese de que " titleProgress
" sea volátil.
2) Intente lanzar algunos postInvalidate()
o titleProgress.postInvalidate()
allí para desencadenar un redibujado.
3) ¿Has sacrificado una máquina x486 en un altar parecido a un robot verde gigante? (es una broma)
Déjame saber si esos dos primeros (y si estás realmente desesperado, el tercero) te llevan a algún lado.
usar comunicación con manejadores,
- ejecuta tu hilo
- en
run()
: debe enviar un mensaje al Handler que actualizará progressBar (horizontal, por supuesto):handler.sendMessage(handler.obtainMessage());
en su Actividad, debe anular 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 } };