繁体   English   中英

Android RunOnUIThread不会永久更改视图的可见性

[英]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()添加额外的步骤。

AsyncTask文件

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM