为什么setVisibility不适用于Android ProgressBar?

时间:2010-09-07 15:12:47

标签: android progress-bar

如果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);
            ...

2 个答案:

答案 0 :(得分:20)

progressBar.setVisibility(View.VISIBLE);
new PrintStatusTask().execute();
progressBar.setVisibility(View.GONE);

这就是你在做的事情: 1.显示progressBar 2.在单独的线程上生成任务 3.隐藏progressBar

整个过程执行时间不会超过几毫秒。您需要在PrintStatusTask类的onPostExecute()方法中隐藏进度条。

您需要了解AsyncTaskexecute()方法是执行另一个线程并且不等待它完成的调用。这就是AsyncTask的重点。

答案 1 :(得分:4)

您是否试图隐藏ProgressBar中的AsyncTask?如果是这样,则必须在onPreExecuteonPostExecute中完成(与所有UI命令一样)。

另外,请使用以下内容:

private void toggleProgressBar() {
    switch (progressBar.getVisibility()) {
    case View.GONE:
        progressBar.setVisibility(View.VISIBLE);
        break;
    default:
        progressBar.setVisibility(View.GONE);
        break;
    }
}