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.
In this case, to update the UI from a background thread, you can create a handler attached to the UI thread, and then post an action as a Runnable : Handler handler = new Handler(Looper. getMainLooper()); handler. post(new Runnable() { @Override public void run() { // update the ui from here } });
Worker threads However, note that you cannot update the UI from any thread other than the UI thread or the "main" thread. To fix this problem, Android offers several ways to access the UI thread from other threads. Here is a list of methods that can help: Activity.
Step 1 − Create a new project in Android Studio, go to File ⇒ New Project and fill all required details to create a new project. Step 2 − Add the following code to res/layout/activity_main. xml. In the above code, we have taken one button and text view, when you click on button , it will update text view.
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.
What you should use in this case is AsyncTask, see http://developer.android.com/reference/android/os/AsyncTask.html
If you're not targeting a pre-1.5 version of Android, you will have to use a different class called UserTask. See http://android-developers.blogspot.com/2009/05/painless-threading.html
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With