Android – 使用runOnUiThread从线程进行UI更改

我正在使用自定义标题视图,并希望在线程正在工作时在标题视图中显示/隐藏进度条。

这是我的标题视图的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> 

在我的活动,设置为自定义标题栏后,我这样做

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

其中titleProgress是ProgressBar对象。

这是我在我的线程中做的

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

但是进度条没有改变。 它从不显示。 有人可以告诉我什么是错的代码?

是否有可能在自定义标题中显示标题进度条?

谢谢。

Related of "Android – 使用runOnUiThread从线程进行UI更改"

几件事情可以尝试:

1)(这可能不是)确保“ titleProgress ”是易变的。

2)尝试在那里抛出一些postInvalidate()titleProgress.postInvalidate()来触发重绘。

3)你是否像一个巨大的绿色机器人一样在一台X486机器上玩耍? (开玩笑)

让我知道,如果前两个(如果你真的绝望,第三)让你到达任何地方。

在这种情况下应该使用的是AsyncTask,请参阅http://developer.android.com/reference/android/os/AsyncTask.html

如果您的目标不是1.5之前版本的Android,则必须使用另一个名为UserTask的类。 请参阅http://android-developers.blogspot.com/2009/05/painless-threading.html

使用与处理程序的通信,

  1. 执行你的线程
  2. 进入run() :你应该发送一个消息给Handler,它会更新progressBar(当然是水平的): handler.sendMessage(handler.obtainMessage());
  3. 在你的Activity中,你应该重写方法handleMessage(Message msg ) :像这样

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

你的布局是否正确? 你有没有试图让这个垂直布局的第一个工作? 只是为了查看当你开始你的活动时进度条是否可见?

尝试改变ProgressBar的风格,以水平:

 style="?android:attr/progressBarStyleHorizontal" 

原本的

 style="?android:attr/progressBarStyleSmall" 

给出了一个在标题栏中不能完全看到的圆形“进度条”。