Android 安卓:进度对话框不';不显示

Android 安卓:进度对话框不';不显示,android,dialog,progress,Android,Dialog,Progress,当用户第一次输入我的活动时,我将一些数据加载到数据库中,并希望在第一次加载数据时显示一个进度对话框。我的活动是一个ExpandableListActivity,我不会创建SimpleExpandableListAdapter或调用setListAdapter传递我的适配器,直到我确定数据确实存在。我的onCreate如下所示: @Override public void onCreate(Bundle savedInstanceState) { super.onCreat

当用户第一次输入我的
活动
时,我将一些数据加载到数据库中,并希望在第一次加载数据时显示一个
进度对话框
。我的活动是一个
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的
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


这看起来应该很简单,但事实证明这是一个巨大的痛苦。任何帮助都将不胜感激。:-)

只要用这句简单的话:

mProgressDialog = ProgressDialog.show(context, "", "msg to show", true);
您可以通过以下方式将其解除:

mProgressDialog.dismiss();

使用AsynTask将数据库加载处理置于后台函数和执行后显示结果中。还有另外一个函数可以处理一些东西,直到后台进程在这里运行,这就是asynTask的例子


不。没有骰子。一切都很好。我通过生成另一个线程并在run()方法中执行builder.fillDbWithDefaultCategories()来实现它。是的,这是一种实现方法,但是AsyncTask遇到了一个问题,我试图让线程休眠几秒钟,这样进度对话框将保持一段时间,而不仅仅是闪过。我最终在一个新线程中进行处理,并在一个处理程序中终止了进度对话框。