如果ProgressBar可以在需要之前消失,那将是很好的。在applyMenuChoice中使用setVisibility.progressBar有问题吗?在PrintStatusTask()。execute()中使用setVisibility.progressBar的问题在于它在运行时崩溃应用程序。
public class Controller extends Activity {
private ProgressBar progressBar;
...
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.controller);
progressBar = (ProgressBar)findViewById(R.id.progressBar);
...
private boolean applyMenuChoice(MenuItem item) {
switch (item.getItemId()) {
case R.id.menuStatus:
progressBar.setVisibility(View.VISIBLE);
new PrintStatusTask().execute();
progressBar.setVisibility(View.GONE);
...
答案 0 :(得分:20)
progressBar.setVisibility(View.VISIBLE);
new PrintStatusTask().execute();
progressBar.setVisibility(View.GONE);
这就是你在做的事情: 1.显示progressBar 2.在单独的线程上生成任务 3.隐藏progressBar
整个过程执行时间不会超过几毫秒。您需要在PrintStatusTask类的onPostExecute()
方法中隐藏进度条。
您需要了解AsyncTask的execute()
方法是执行另一个线程并且不等待它完成的调用。这就是AsyncTask的重点。
答案 1 :(得分:4)
您是否试图隐藏ProgressBar
中的AsyncTask
?如果是这样,则必须在onPreExecute
或onPostExecute
中完成(与所有UI命令一样)。
另外,请使用以下内容:
private void toggleProgressBar() {
switch (progressBar.getVisibility()) {
case View.GONE:
progressBar.setVisibility(View.VISIBLE);
break;
default:
progressBar.setVisibility(View.GONE);
break;
}
}