ProgressDialog没有显示在我的ListActivity的onListItemClick方法中

如何解决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()),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,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),500000);
            progressDialog.dismiss();
        }
    }.run();
}
    

解决方法

        我怀疑接下来是您的代码最繁忙的行:
catalogAdapter.mappingServicesCatalog.loadFromRml(...);
为了显示对话框,您需要从名为
ProgressDialog.show(...)
的函数返回。那是因为对该调用的实际处理是在消息循环中完成的(该循环首先调用了您的函数)。因此,在您的代码中,您正在创建一个对话框并将其标记为要显示,但永远不会通过在同一函数末尾调用
.dismiss()
来给它显示自己的机会。 您应该使用
AsyncTask
。首先,您需要将UI处理代码与
loadFromRml
功能分开。将所有耗时的东西放在
AsyncTask
doInBackground
函数中,所有UI都应在
onPreExecute
onPostExecute
中。 您可以在
onListItemClick
功能中显示进度对话框,而在
AsyncTask.onPostExecute
功能中将其关闭。或者,也可以在
AsyncTask.onPreExecute
中显示进度对话框,然后在
AsyncTask.onPostExecute
中隐藏它。 ѭ8有很多示例,其中一个位于AsycnTask android docs中。可以在android开发人员资源中找到另一篇有用的文章:无痛线程。     ,        我的应用程序中也遇到了相同类型的情况,但是我已经使用给定的代码解决了它。 我已经创建了这样的进度对话框
final ProgressDialog dialogMatchList = ProgressDialog
            .show(TennisAppActivity.mContext,\"\",\"Loading. Please wait...\",true);
    dialogMatchList.setProgressStyle(ProgressDialog.STYLE_SPINNER);
    dialogMatchList.setIndeterminate(true);
    dialogMatchList.setCancelable(true);
当进度对话框关闭打击功能时
dialogMatchList.setOnDismissListener(new OnDismissListener() {

        public void onDismiss(DialogInterface arg0) {

            list.setAdapter(new EfficientAdapter(getApplicationContext()));

        }
    });
希望对您有所帮助     ,        
    progressDialog = ProgressDialog.show(CatalogActivity.this,\"Please wait for few seconds...\",true);

    runOnUIThread(new Runnable()
    {


public void run()
  {
      //Do you task here 
       progressDialog.dismiss();


 }
    });
如果您觉得它有用,请别忘了将其标记为答案 最好的祝福, 〜安纳普     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?