【问题标题】:Progress Bar does not go after completion完成后进度条不走
【发布时间】:2016-03-30 13:35:34
【问题描述】:

我正在使用水平进度条。它工作正常,但在完成时间后不会消失。

progressBar = (ProgressBar) findViewById(R.id.progressBar1);
progressBar.setRotation(180);
new Thread(new Runnable() {
    public void run() {
        while (progressStatus < 21) {
            progressStatus += 1;
            handler.post(new Runnable() {
                public void run() {
                    progressBar.setProgress(progressStatus);
                    }
            });
            try {
                Thread.sleep(110);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        progressBar.setVisibility(View.GONE);
        img.setVisibility(View.GONE);
    }
}).start();

}

while 语句末尾的 setVisibility() 函数使我的应用程序崩溃。

Logcat:

12-24 09:55:54.502    7160-7245/com.food.foodjugaad E/AndroidRuntime﹕ FATAL EXCEPTION: Thread-25568
Process: com.food.foodjugaad, PID: 7160
android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
        at android.view.ViewRootImpl.checkThread(ViewRootImpl.java:6462)
        at android.view.ViewRootImpl.requestLayout(ViewRootImpl.java:897)
        at android.view.View.requestLayout(View.java:17494)
        at android.view.View.requestLayout(View.java:17494)
        at android.view.View.requestLayout(View.java:17494)
        at android.view.View.requestLayout(View.java:17494)
        at android.view.View.requestLayout(View.java:17494)
        at android.view.View.requestLayout(View.java:17494)
        at android.view.View.requestLayout(View.java:17494)
        at android.view.View.setFlags(View.java:9726)
        at android.view.View.setVisibility(View.java:6698)
        at android.widget.ProgressBar.setVisibility(ProgressBar.java:1546)
        at com.food.foodjugaad.Swipe$2.run(Swipe.java:95)
        at java.lang.Thread.run(Thread.java:818)

【问题讨论】:

    标签: android progress-bar visibility


    【解决方案1】:

    android只有1个线程来更新UI,它是UI线程,任何其他线程都不能更新UI,如果你这样做会抛出异常。我编辑了你的代码。你能不能试试。

     progressBar = (ProgressBar) findViewById(R.id.progressBar1);
    progressBar.setRotation(180);
    new Thread(new Runnable() {
        public void run() {
            while (progressStatus < 21) {
                progressStatus += 1;
                handler.post(new Runnable() {
                    public void run() {
                        progressBar.setProgress(progressStatus);
                        }
                });
                try {
                    Thread.sleep(110);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
    
            runOnUiThread(new Runnable() {
                public void run(){                     
                    progressBar.setVisibility(View.GONE);
                    img.setVisibility(View.GONE);
                }
            });
        }
    }).start();
    

    【讨论】:

    • 我已经发布了 LogCat。
    • 安卓只有 1 个线程来更新 UI。但是你在另一个线程中调用更新,所以它会抛出那个错误。您需要在 UI 线程中调用 setVisible。我用你的代码编辑了我的帖子。你可以试试看。
    • 工作。非常感谢!!
    • 不知道为什么这个答案被否决了。但它是正确的
    【解决方案2】:

    您只能从主线程修改小部件。执行另一个 runnable 以更改可见性。

    【讨论】:

    • 好的,我试试看。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-27
    • 1970-01-01
    • 2010-10-18
    • 2017-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多