完成后进度条不走
Progress Bar does not go after completion
我正在使用水平进度条。它工作正常,但在时间完成后不会消失。
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.run(Swipe.java:95)
at java.lang.Thread.run(Thread.java:818)
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();
您只能从主线程修改小部件。做另一个可运行的来改变可见性。
我正在使用水平进度条。它工作正常,但在时间完成后不会消失。
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.run(Swipe.java:95)
at java.lang.Thread.run(Thread.java:818)
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();
您只能从主线程修改小部件。做另一个可运行的来改变可见性。