Android进度对话框

栏目: Android · 发布时间: 7年前

内容简介:翻译自:https://stackoverflow.com/questions/7713222/android-progress-dialog
我的应用程序从互联网上获取一些 HTML

代码,完成后,将其显示在设备屏幕上.由于这需要大约3-4秒钟,因此屏幕保持黑色,我想使用进度对话框.这是我的代码:

package com.nextlogic.golfnews;



// ALL THE IMPORTS ....

public class Activity1 extends Activity {

    private ProgressDialog progressDialog;
 @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main2);

        progressDialog = ProgressDialog.show(Activity1.this, "", "Loading...");
        new Thread() 
        {
          public void run() 
          {

             try
               {
                sleep(2000);

          // HERE I'VE PUT ALL THE FUNCTIONS THAT WORK FOR ME
 }
    catch (Exception e)
    {
        Log.e("tag",e.getMessage());
    }
// dismiss the progressdialog   
  progressDialog.dismiss();
 }
}.start();

该程序有效,但不再显示任何内容.我在logcat中有一个错误:

Only the original thread that created a view hierarchy can touch its views.

请你帮助我好吗 ?提前致谢.

该错误足以解释.要更新一个可视对象,您必须在主线程内运行更改.快速而肮脏的修复可能是在 runOnUiThread()

内调用更新代码.

但是在你的情况下,我会使用 AsyncTask 来下载和更新进度条的进度.该任务具有在UI线程结束时运行的属性(因此您可以更新其中的视图,例如关闭进度对话框)

Here 是如何使用AsyncTask显示下载进度对话框的示例.

更新

Stackoverflow已经有你所有问题的答案. Here 是AsyncTask的示例,用于下载某些内容并显示下载进度.正是你想要的.

更新2

好的,这是使用AsyncTask的代码:

public class Activity1 extends Activity
{
    private ProgressDialog progressDialog;

    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        new AsyncTask<Integer, Integer, Boolean>()
        {
            ProgressDialog progressDialog;

            @Override
            protected void onPreExecute()
            {
                /*
                 * This is executed on UI thread before doInBackground(). It is
                 * the perfect place to show the progress dialog.
                 */
                progressDialog = ProgressDialog.show(Activity1.this, "",
                        "Loading...");
            }

            @Override
            protected Boolean doInBackground(Integer... params)
            {
                if (params == null)
                {
                    return false;
                }
                try
                {
                    /*
                     * This is run on a background thread, so we can sleep here
                     * or do whatever we want without blocking UI thread. A more
                     * advanced use would download chunks of fixed size and call
                     * publishProgress();
                     */
                    Thread.sleep(params[0]);
                    // HERE I'VE PUT ALL THE FUNCTIONS THAT WORK FOR ME
                }
                catch (Exception e)
                {
                    Log.e("tag", e.getMessage());
                    /*
                     * The task failed
                     */
                    return false;
                }

                /*
                 * The task succeeded
                 */
                return true;
            }

            @Override
            protected void onPostExecute(Boolean result)
            {
                progressDialog.dismiss();
                /*
                 * Update here your view objects with content from download. It
                 * is save to dismiss dialogs, update views, etc., since we are
                 * working on UI thread.
                 */
                AlertDialog.Builder b = new AlertDialog.Builder(Activity1.this);
                b.setTitle(android.R.string.dialog_alert_title);
                if (result)
                {
                    b.setMessage("Download succeeded");
                }
                else
                {
                    b.setMessage("Download failed");
                }
                b.setPositiveButton(getString(android.R.string.ok),
                        new DialogInterface.OnClickListener()
                        {

                            @Override
                            public void onClick(DialogInterface dlg, int arg1)
                            {
                                dlg.dismiss();
                            }
                        });
                b.create().show();
            }
        }.execute(2000);

        new Thread()
        {
            @Override
            public void run()
            {

                // dismiss the progressdialog
                progressDialog.dismiss();
            }
        }.start();
    }
}

翻译自:https://stackoverflow.com/questions/7713222/android-progress-dialog


以上所述就是小编给大家介绍的《Android进度对话框》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

推荐系统

推荐系统

[奥地利] Dietmar Jannach、Markus Zanker、Alexander Felfernig、Gerhard Friedrich / 蒋 凡 / 人民邮电出版社 / 2013-6-25 / 59.00元

编辑推荐: 通过对本书的学习,读者不仅可以全面系统地了解该领域的基础原理,还能试验如何搭建一套真正的推荐系统。 —— 百度主任架构师、百度技术委员会主席 廖若雪 本书比较全面地介绍了推荐系统涉及的相关知识点,很适合对于推荐系统感兴趣的相关人员作为入门教程,目前能够系统全面介绍相关技术的中文书籍还显得匮乏,相信这本译著对于缓解这种情况大有裨益。 ——新浪微博数据挖掘技术专家 ......一起来看看 《推荐系统》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具