我正在尝试在我的活动中添加progressBar。在布局XML文件中,我为progressBar和textView设置了android:visibility =“gone”,显示了进度级别。我想按一个按钮并使用progressBar和textview visibility =“visible”启动一个进程,然后在进程结束后再次隐藏它们。
问题是当我按下发现按钮时,没有显示任何内容! 当我在Log.e(“visibilty”,“GONE”)之前删除两行时,视图仅在进程结束后才可见。似乎setVisibility指令是在While循环之后执行的,这很奇怪。
任何解决方案的人?
答案 0 :(得分:0)
您尝试在主UI线程中延迟修改UI。这不会按预期工作。您可以使用AsyncTask
来更新视图并在结尾隐藏它。
private class Sample extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... params) {
//Do in background, NO UI HERE
for (int i = 0; i < 100; i++) {
try {
Thread.sleep(1000);
this.publishProgress(); //Call onProgressUpdate
} catch (InterruptedException e) {
Thread.interrupted();
}
}
return "Finished!";
}
@Override
protected void onPostExecute(String result) {
//After it's completed, touch UI here
}
@Override
protected void onPreExecute() {
//Before it starts, touch UI here
}
@Override
protected void onProgressUpdate(Void... values) {
//Update text here, touch UI here
}
}
答案 1 :(得分:0)
如果您想在延迟后运行一些代码,可以使用Handler + Runnable而不是睡眠主线程。
final Handler handler = new Handler();
Runnable hideRunnable = new Runnable() {
@Override
public void run() {
// Your visibility logic
}
};
handler.postDelayed(hideRunnable, 190); // 190 milliseconds
有一些关于Updating a ProgressBar with a Handler的讨论。如果你确实需要一些进度跟踪,AsyncTask确实有内置的。