У меня 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();
}