0

我试图从一个在progressBar 中淡出的doInBackground 中调用一个函数AsyncTask。每次我调用此函数时,进度条都会根据需要淡入然后消失。我在最后添加了一个检查,告诉我进度条的可见性在方法完成后GONE立即恢复:runOnUIThread

重置程序消失

为什么会这样,我怎样才能使进度条保持可见?

我一直在使用以下内容:

    @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 以下都会出现此问题。

4

1 回答 1

1

您不需要也可能不应该这样做。AsyncTask有已经在线程上运行的方法UI(除了doInBackground()

将要运行的代码放入其中,UI以便onPostExecute()在完成后运行doInBackground()

或者,如果它更适合您的需求,您也可以将代码放入onProgressUpdate()并在需要时使用publishProgress().

或者,如果您只需要在任务开始时运行它,那么您可以将其放入onPreExecute(). 所有这些都运行在UI Thread. 无需添加额外的步骤runOnUiThread()

AsyncTask 文档

于 2013-09-12T19:36:59.983 回答