我正在尝试从 AsyncTask
的 doInBackground 中调用一个在进度条中淡出的函数。每次我调用此函数时,进度条都会根据需要淡入然后消失。我在最后添加了一个检查,告诉我一旦 runOnUIThread
方法完成,进度条的可见性就返回到 GONE
:
Reset Prog To Gone
这是为什么?如何才能使进度条保持可见?
我一直在使用以下内容:
@TargetApi(12)
private void fadeInProgressBar(final int time, ProgressBar prog){
System.out.println("MainActivity: Fading In ProgressBar");
runOnUiThread(new Runnable(){
@Override
public void run() {
if(usingHigherApiThan(12)&&prog.getVisibility()==View.GONE){
prog.setVisibility(View.VISIBLE);
if(prog.getAlpha()<1){
prog.animate().setDuration(time).alpha(1);
}
}else if(prog.getVisibility()==View.GONE){
prog.setVisibility(View.VISIBLE);
final AlphaAnimation animation = new AlphaAnimation(0F, 1F);
animation.setDuration(time);
animation.setFillAfter(true);
prog.startAnimation(animation);
}
}
});
if(prog.getVisibility()==View.VISIBLE){
System.out.println("Left Prog Visible");
}else{
System.out.println("Reset Prog To Gone");
}
}
注意 usingHigherApiThan(12)
仅检查构建版本是否为 12 或更高版本,12 以上和 11 以下都会出现此问题。
最佳答案
您不需要,也可能不应该这样做。 AsyncTask
已经具有在 UI
线程上运行的方法(除了 doInBackground()
之外的所有方法)
将要在 UI
上运行的代码放入 onPostExecute()
中,以便在 doInBackground()
完成时运行。
或者,如果它更适合您的需求,您也可以将代码放入 onProgressUpdate()
中,并在需要时使用 publishProgress()
调用此函数。
或者,如果您只需要它在任务启动时运行,那么您可以将其放入 onPreExecute()
中。所有这些都在 UI 线程
上运行。无需使用 runOnUiThread()
添加额外的步骤。
关于java - Android RunOnUIThread 不会永久改变 View 可见性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18772692/