android进度对话栏疑惑

时间:2011-11-01 07:38:37

标签: android android-layout android-emulator

我使用以下代码显示动态进度对话框:

public void loading()
{
     final int WelcomeScreenDisplay=1000;
     progressDialog = new ProgressDialog(this);
     progressDialog.setCancelable(true);

     progressDialog.setMessage("Loading...");
    progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
   progressDialog.incrementProgressBy(10);
    progressDialog.show();



     Thread WelcomeThread=new Thread()
     {
        int wait=0;
        public void run()
        {
            try
            {
                super.run();
                while(wait<WelcomeScreenDisplay)
                {
                     sleep(100);
                          //  progressDialog.setProgress(0);
                     progressDialog.incrementProgressBy(10);    
                        wait+=100;

                }
            }
            catch(Exception e)
            {
                e.printStackTrace();
            }

        }
     };
     WelcomeThread.start();
}

但有一些问题: 1)单击按钮调用此功能时,10-15秒后显示加载条 2)当用户输入用户名和密码并点击登录按钮时,当活动从登录页面跳转到另一个页面时,正在显示进度条并使用意图,然后在加载第二页的动态内容时,两者之间显示空白屏幕页面1-2分钟

我想知道我将实施哪些更改,以便不会出现此空白屏幕...并且当加载完成时,我的应用程序会从1页跳转到另一页。

3 个答案:

答案 0 :(得分:2)

每当执行此类操作时,请使用AsyncTask。这是一个样本

class eval extends AsyncTask<Void,Void,Void>
{

    ProgressDialog d;

    @Override
    protected void onPreExecute()
    {
        super.onPreExecute();
        d=ProgressDialog.show(MainScreen.this,"Please Wait","Populating  content...",true);
    }

    @Override
    protected void doInBackground(Void... params) 
    {
        //perform the required operation of fetching contents
        return null;
    }

    @Override
    protected void onPostExecute(Void result) 
    {
        super.onPostExecute(result);
        d.dismiss();
        // now call the required Activity

    }
}

现在在您的程序中调用此任务需要执行此操作

new eval().execute();

确保在此语句后的主UI线程中没有任何操作

答案 1 :(得分:0)

根据我的说法,AsyncTask将是执行此类任务的最佳方式,因为在这种情况下,UI将可以自由执行其他任务,否则UI将在任务期间挂起,并且不用担心线程管理。 你可以尝试:

http://android-solution-sample.blogspot.com/2011/11/android-asynctask-example.html

http://developer.android.com/reference/android/os/AsyncTask.html

答案 2 :(得分:0)

您必须在doInBackground()方法中获取数据。发生这种情况时......将显示进度对话框。您在onPostExecute()中调用另一个活动。是的,执行顺序是onPreExecute(),然后是doInBackground(),最后是OnPostExecute()。请记住,doInBackground()方法在非UI线程中执行。所以你不能在这里使用toasts或alertDialogues。