ProgressDialog没有显示在我的ListActivity的onListItemClick方法中
||
我有
ListActivity
和BaseAdapter
。每次用户单击一个项目,我都会清除适配器并重新加载新内容(这是某种树逻辑)。
有时在onListItemClick()
中适配器需要几秒钟才能获得新的项目列表。我想在输入onListItemClick()
时显示一些进度条,并在完成时将其隐藏。
为什么在我的示例中没有显示进度对话框?我怀疑(如我所读),问题可能是因为“计算”未在后台线程中运行?如果是这样,有人可以根据我的代码给我一个例子吗?
这是代码:
protected void onListItemClick(ListView l, View v, int position, long id) {
super.onListItemClick(l, v, position, id);
catalogAdapter.previousUrl = catalogAdapter.currentUrl;
RRmlMappingServicesCatalogItem item = catalogAdapter.getItem(position);
catalogAdapter.currentUrl = item.href;
//catalogAdapter.mappingServicesCatalog.loadFromRml(new RIoConnectionManagerImpl(this.getApplicationContext()), item.href, null, 120000, 500000);
loadCatalogFromRml(this.getApplicationContext(), item.href);
catalogAdapter.clearData();
if ((catalogAdapter.mappingServicesCatalog.getFlatItems()).length == 0)
{
catalogAdapter.mappingServiceContent = new RRmlMappingServiceContent ();
this.loadContentFromRml(this.getApplicationContext(), item.href);
//catalogAdapter.mappingServiceContent.loadFromRml(new RIoConnectionManagerImpl(this.getApplicationContext()),item.href, null, 120000, 500000);
settings = (GlobalSettings) getApplication();
settings.setMappingServiceContent(catalogAdapter.mappingServiceContent);
if (catalogAdapter.mappingServiceContent.authentication != null)
{
startActivity(new Intent(CatalogActivity.this,
LoginActivity.class));
}
else
{
startActivity(new Intent(CatalogActivity.this,
MapActivity.class));
}
}
else
{
for (RRmlMappingServicesCatalogItem s : catalogAdapter.mappingServicesCatalog.getFlatItems()) {
catalogAdapter.addItem(s);
}
setListAdapter(catalogAdapter);
}
}
public void loadContentFromRml(Context context, final String url)
{
final Context myContext = context;
final String myUrl = url;
progressDialog = ProgressDialog.show(CatalogActivity.this, \"\",
\"Loading content...\", true);
new Runnable()
{
public void run()
{
catalogAdapter.mappingServiceContent.loadFromRml(new RIoConnectionManagerImpl(myContext),myUrl, null, 120000, 500000);
progressDialog.dismiss();
}
}.run();
}
public void loadCatalogFromRml(Context context, String url)
{
final Context myContext = context;
final String myUrl = url;
progressDialog = ProgressDialog.show(CatalogActivity.this, \"\",
\"Loading catalog...\", true);
new Runnable()
{
public void run()
{
catalogAdapter.mappingServicesCatalog.loadFromRml(new RIoConnectionManagerImpl(myContext), myUrl, null, 120000, 500000);
progressDialog.dismiss();
}
}.run();
}
没有找到相关结果
已邀请:
3 个回复
墩瓣茅械
为了显示对话框,您需要从名为
的函数返回。那是因为对该调用的实际处理是在消息循环中完成的(该循环首先调用了您的函数)。因此,在您的代码中,您正在创建一个对话框并将其标记为要显示,但永远不会通过在同一函数末尾调用
来给它显示自己的机会。 您应该使用
。首先,您需要将UI处理代码与
功能分开。将所有耗时的东西放在
的
函数中,所有UI都应在
或
中。 您可以在
功能中显示进度对话框,而在
功能中将其关闭。或者,也可以在
中显示进度对话框,然后在
中隐藏它。 ѭ8有很多示例,其中一个位于AsycnTask android docs中。可以在android开发人员资源中找到另一篇有用的文章:无痛线程。
捅瓶啡
当进度对话框关闭打击功能时
希望对您有所帮助
长拳
如果您觉得它有用,请别忘了将其标记为答案 最好的祝福, 〜安纳普