Android: диалог прогресса не отображается - PullRequest
3 голосов
/ 30 августа 2010

У меня есть некоторые данные, которые я загружаю в базу данных при первом входе пользователя в мой Activity и хочу показать ProgressDialog, пока эти данные загружаются впервые Моя активность - ExpandableListActivity, и я не создаю SimpleExpandableListAdapter или вызов setListAdapter, пропускающий мой адаптер, пока я не буду уверен, что данные действительно есть. Мой onCreate выглядит так:

@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        mCategoryDbHelper = new CategoryDBHelper(this);

        // Build default categories... if not there yet
        CategoryDbBuilder builder = new CategoryDbBuilder(this);
        if (!builder.hasCategoriesInTable()) {
            showDialog(PROGRESS_DIALOG_ID);
            builder.fillDbWithDefaultCategories();
            removeDialog(PROGRESS_DIALOG_ID);
        }

        populate();
    }

Я переписал onCreateDialog как таковой:

@Override
    protected Dialog onCreateDialog(int id) {
        switch (id) {
            case PROGRESS_DIALOG_ID: {
                ProgressDialog dialog = new ProgressDialog(this);
                dialog.setMessage("Loading categories for the first time. Please wait...");
                dialog.setIndeterminate(true);
                dialog.setCancelable(false);
                return dialog;
            }       
        }
        return null;
    }

Метод populate() читает базу данных и настраивает мой адаптер списка, затем вызывает setListAdapter.

Кажется, это должно быть просто, но это оказывается огромной болью. Любая помощь будет оценена. : -)

Ответы [ 2 ]

2 голосов
/ 30 августа 2010

Используйте AsynTask, чтобы поместить обработку загрузки базы данных в фоновую функцию и в результат отображения после выполнения. и есть еще одна функция для обработки чего-либо, пока фоновый процесс, запущенный здесь, не является примером asynTask

Android - я хочу показать пользователю процесс загрузки файла

2 голосов
/ 30 августа 2010

Просто используйте эту простую строку:

mProgressDialog = ProgressDialog.show(context, "", "msg to show", true);

Вы можете отклонить его с помощью:

mProgressDialog.dismiss();
...