Почему setVisibility не работает на Android ProgressBar? - PullRequest
12 голосов
/ 07 сентября 2010

Было бы неплохо, если бы ProgressBar можно было убрать, пока он не понадобится.Есть ли проблема с использованием setVisibility.progressBar в applyMenuChoice?Проблема с использованием setVisibility.progressBar в PrintStatusTask (). Execute () заключается в том, что он вызывает сбой приложения во время выполнения.

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 ]

20 голосов
/ 07 сентября 2010
progressBar.setVisibility(View.VISIBLE);
new PrintStatusTask().execute();
progressBar.setVisibility(View.GONE);

Это то, что вы делаете: 1. Показать индикатор выполнения 2. Создать задачу в отдельном потоке 3. Скройте индикатор выполнения

Весь этот процесс займет не более пары миллисекунд. Вам необходимо скрыть индикатор выполнения в методе onPostExecute() класса PrintStatusTask.

Вы должны понимать, что execute() метод AsyncTask - это вызов, который выполняет другой поток и не ожидает его завершения. В этом вся суть AsyncTask.

4 голосов
/ 07 сентября 2010

Вы пытаетесь скрыть ProgressBar в AsyncTask? Если это так, это должно быть сделано в onPreExecute или onPostExecute (как и все команды пользовательского интерфейса).

Кроме того, используйте что-то вроде этого:

private void toggleProgressBar() {
    switch (progressBar.getVisibility()) {
    case View.GONE:
        progressBar.setVisibility(View.VISIBLE);
        break;
    default:
        progressBar.setVisibility(View.GONE);
        break;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...