如何在开始活动之前显示进度对话框

时间:2012-09-06 12:01:17

标签: android android-activity progress-bar

如何在活动之间的长时间转换期间安装旋转进度条(或对话框)?我已经看到帮助实现AsyncTask的解决方案 - 我在帖子中提到的链接将How to display progress dialog before starting an activity in Android?,但问题是进度条没有旋转。

package expir.java.file;

import java.io.IOException;

import javax.xml.parsers.ParserConfigurationException;

import org.xml.sax.SAXException;

import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.Window;
import android.widget.Button;

public class ExpirActivity extends Activity {    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.main);        
        Button mapButton = (Button)findViewById(R.id.first_button);
        mapActivityIntent = new Intent(this, MyMapActivity.class);
        pDialog = new ProgressDialog(this);

        mapButton.setOnClickListener(new View.OnClickListener() {           
            public void onClick(View v) {
                pDialog.setMessage("Loading...");
                new MyTask(pDialog).execute();              
            }   
        });

        Button downloadButton = (Button)findViewById(R.id.second_button);        
        downloadButton.setOnClickListener(new View.OnClickListener() {

            public void onClick(View v) {               
                as.DownloadFromUrl("0", "null");;
            }
        }); 
        Button parseButton = (Button)findViewById(R.id.third_button);        
        parseButton.setOnClickListener(new View.OnClickListener() {

            public void onClick(View v) {               
                SAXParserCreateDataBase gi = new SAXParserCreateDataBase();
                try {
                    gi.start(ExpirActivity.this);
                } catch (SAXException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (ParserConfigurationException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        });
        Button updateButton = (Button)findViewById(R.id.fourth_button);        
        updateButton.setOnClickListener(new View.OnClickListener() {

            public void onClick(View v) {               
                SAXParserCreateDataBase gi = new SAXParserCreateDataBase();
                try {
                    gi.update(ExpirActivity.this);
                } catch (ParserConfigurationException e) {
                    e.printStackTrace();
                } catch (SAXException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }); 
    }    

    public class MyTask extends AsyncTask<Void, Void, Void> {
          public MyTask(ProgressDialog progress) {
            this.progress = progress;
          }

          public void onPreExecute() {
            progress.show();
          }

          public Void doInBackground(Void... unused) {
            startActivity(mapActivityIntent);
            return null;            
          }

          public void onPostExecute(Void unused) {
            progress.dismiss();
          }
          ProgressDialog progress;
    }


    DownloadPrimaryDate as = new DownloadPrimaryDate();
    Intent mapActivityIntent;
    ProgressDialog pDialog;
}

更新    

LogCat结果:

FirstActivity.onCreate()

FirstActivity.onStart()

FirstActivity.onResume()

FirstActivity.onPause()

SecondActivity.onCreate()

SecondActivity.onStart()

SecondActivity.onResume()

FirstActivity.onStop()

这解释了为什么会这样。

UPDATE
在我意识到我在想什么 - 并非我在活动之间实现这种转变的所有尝试都是均匀的。

1 个答案:

答案 0 :(得分:0)

我看到了两个解决方案,具体取决于任务所需的时间。

如果第一个活动执行了长任务,则在按下按钮时创建一个进度对话框,将onShowListener设置为他的对话框,在onShow回调中启动您的异步任务。任务完成后,关闭进度对话框并开始下一个活动。

如果下一个活动执行了长任务,只需在活动onCreate中设置简单布局并创建一个进度对话框,设置onShowListener并在onShow中启动AsyncTtask以及何时完成加载其余的ui并关闭对话框。