我有一些数据在用户第一次输入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
。
这看起来应该很简单,但结果却是巨大的痛苦。任何帮助,将不胜感激。 : - )
答案 0 :(得分:2)
只需使用这条简单的行:
mProgressDialog = ProgressDialog.show(context, "", "msg to show", true);
你可以用以下方式解雇它:
mProgressDialog.dismiss();
答案 1 :(得分:2)
使用AsynTask将数据库加载处理放在后台函数和后执行显示结果中。还有另一个处理事物的功能,直到这里运行的后台进程是asynTask的例子