java - Android RunOnUIThread 不会永久改变 View 可见性

标签 java android view

我正在尝试从 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() 添加额外的步骤。

AsyncTask Docs

关于java - Android RunOnUIThread 不会永久改变 View 可见性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18772692/

相关文章:

java - 如何限制用户通过在浏览器中输入URL来访问页面?

java - parseInt 和 viewflipper 布局问题

java - 在 Android 中比较 View 和布局的资源高效方式

Java父类(super class)继承

java - 编译错误 : No source code is available for type com. google.gson.Gson

android - 从其他类使用时,lateinit 属性绑定(bind)尚未初始化

android - 在 onPostExecute 中启动一个 Activity

iphone - NSString 不会在类之间传递

mysql - 简单外键/创建 View 问题

java - 当每个模块都有特定版本时,如何在 Nexus 中将 Artifact 关联到一个业务版本下?