[英]Android - setVisibility not changing visibility of RelativeLayout
[英]Android RunOnUIThread Isnt permenantly changing View visibility
我试图从渐进进度栏中的AsyncTask
的doInBackground内调用函数。 每次我调用此函数时,进度栏都会根据需要淡入,然后消失。 我在末尾添加了一个检查,该检查告诉我,一旦runOnUIThread
方法完成,进度条的可见性就会恢复为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 Thread
上运行。 无需使用runOnUiThread()
添加额外的步骤。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.