我的activity_main.xml包含这个progressBar,它开始隐藏("消失了#34;)
<ProgressBar
android:id="@+id/progressBar_sendingPhoneNumber"
style="?android:attr/progressBarStyleLarge"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/button_sendPhoneNumber"
android:layout_centerInParent="true"
android:visibility="gone" />
我的MainActivity.java有这个,
我有一个按钮的onClick处理程序
final Context context = this;
sendPhoneNumberButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
ProgressBar progressBar = (ProgressBar) findViewById(R.id.progressBar_sendingPhoneNumber);
progressBar.setVisibility(View.VISIBLE);
// Simulate HTTP connection
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
progressBar.setVisibility(View.GONE);
// Redirect to new activity
Intent intent = new Intent(context, InboxActivity.class);
startActivity(intent);
}
});
问题是进度条永远不会显示,尽管执行onClick代码(例如,它最终被重定向到新活动)。这一行:
progressBar.setVisibility(View.VISIBLE);
不会生效。
我认为这与上下文有关,并试图改变来自&#34;外部&#34;的进度条的可见性。活动,但我不确定。
我该如何解决这个问题?
答案 0 :(得分:3)
它永远不会显示,因为你正在调用
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
使得&#34;睡眠&#34;负责绘制您试图显示的同一ProgressBar
的线程
答案 1 :(得分:3)
在UI线程上调用Thread.sleep(3000);
将阻止UI线程。你不应该阻止UI线程。
http://developer.android.com/training/articles/perf-anr.html
如果您实现Thread或HandlerThread,请确保您的UI线程 在等待工作线程完成时不阻塞 - 不要 调用Thread.wait()或Thread.sleep()
另外,你可以移动它:
ProgressBar progressBar = (ProgressBar) findViewById(R.id.progressBar_sendingPhoneNumber);
在View.onClick
之外。每次单击Button
时都无需初始化视图。