Android – using runOnUiThread to do UI changes from a thread

android

I am using a custom title view and would like to show/hide a progressbar in the title view when a thread is working.

This is my title view's XML

<?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 my Activity, after setting this as the custom title bar, I do this

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

where titleProgress is ProgressBar object.

This is what I do in my thread

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

But there is no change to the progress bar. It is never displayed. Can someone please tell me what is wrong with the code?

Is it possible to display the title progressbar in a custom title?

Thanks.

Best Solution

Few Things to try:

1) (This probably isn't it) Make sure "titleProgress" is volatile.

2) Try throwing a few postInvalidate() or titleProgress.postInvalidate() in there to trigger a redraw.

3) Have you sacraficed a x486 machine on an alter resembling a giant green robot? (just kidding)

Let me know if those first two (and if you're really desperate, the third) get you anywhere.