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

时间:2011-12-01 05:35:27

标签: android

我有一个活动'Activity1'以及另一个名为'Activity2'的活动。单击“Activity1”中的按钮后会加载“Activity2”。我想显示进度对话框,直到加载新活动。你能告诉我这个代码吗

5 个答案:

答案 0 :(得分:4)

在Activity2的onCreate方法中显示进度对话框,然后在AsyncTask中执行所有耗时的加载。在AsyncTask的onPostExecute()方法中,关闭进度对话框。

答案 1 :(得分:2)

是的,使用AsynTask<>你可以得到你的结果

在OnPreExecute中显示你的进度对话框,在OndoInBackground中运行你的活动,在onPostExecute中删除你的对话框

得到想法Get Concept

答案 2 :(得分:2)

有两种方式

第一种方法使用异步任务

如果您正在执行繁重的任务,例如从服务器加载数据或在这种情况下解析xml,请使用 AsynTask<> 如果您想从ActivityA调用ActivityB,那么

* step-1 *创建一个AsyncTask类。在doBackground()方法内编写所有后台任务,完成任务后,你想调用一个代码写入onPostExecute()后执行方法

的活动
import android.content.Context;
import android.content.Intent;
import android.os.AsyncTask;
import android.view.View;



public class LoadingDataFromServer extends AsyncTask {
    Context currentContext = null;

    boolean isCancelled = false;


    public LoadingDataFromServer(Context context) {
        currentContext = context;

    }

    @Override
    protected void onPreExecute() {
        if (DashboardActivity.progressBarLayout != null) {
            DashboardActivity.progressBarLayout.setVisibility(View.VISIBLE);
            // Log.i(TAG,".....Now make progress bar visible.....");
        }

        super.onPreExecute();
    }

    @Override
    protected Object doInBackground(Object... params) {
        // do background processing

        try {
// do background tasks eg sever communication
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return null;
    }

    @Override
    protected void onPostExecute(Object result) {
        // TODO Auto-generated method stub
        // progressDialog.dismiss();

        // call second Activity
        Intent i = new Intent(currentContext, com.ActvityB.class);
        super.onPostExecute(result);
    }

    @Override
    protected void onCancelled() {
        // TODO Auto-generated method stub
        isCancelled = true;
        super.onCancelled();
    }

}

step-2 在您要跳转到新活动的活动中(例如在ActivityA中),调用AsynTask的execute()

new LoadingDataFromServer(context).execute(null);

第二种方法

  • 首先显示进度对话框。
  • 创建一个线程来完成所有后台任务。线程完成时 然后任务取消进度对话框并调用下一个活动

  • 当线程完成任务时,然后调用下一个活动传递给它 对象(进度对话框)和新活动内部忽略了这一点 对话框。

答案 3 :(得分:1)

其他答案(使用AsynTask)是正确的,但您需要弄清楚的问题是导致延迟的原因。它是在Activity1的后端发生的事情还是在前端Activity2上发生的事情。如果您在启动Activity2之前正在进行一些处理,那么请遵循Last Warrior或Ted Hopp的建议......如果您在Activity2中有一些冗长的加载过程,那么您将需要启动进度对话框,因为第一件事就是在创建Activity2然后将处理资源的任何内容移到AsynTask(或者只是另一个线程)中。

我想在不太可能的情况下,A1和A2分别需要额外的时间分别在每个结尾和前面,你需要打开和关闭一个进度对话框...我认为没有办法当你从一个活动转移到另一个活动时,保持一个在前台打开。

答案 4 :(得分:1)

你可以通过AsyncTAsk来实现。哪些代码花费时间执行只是将其放入

  

doInBackground()

覆盖asyncTask和

的方法
  

startActivity(intent)----只需输入onPostExcute()

即可
  protected class InitTask extends AsyncTask<Context, Integer, Integer> {

  @Override protected Integer onPreExcute( Context... params )  {

        //assign progressbar here

}
    @Override protected Integer doInBackground( Context... params )  {

         //do all the stuffs here
         return super.doInBackground( params )

} @Override protected void onProgressUpdate(Integer... values)  {
         super.onProgressUpdate(values); 
         //update progress bar
}

    @Override protected void onPostExecute( Integer result )  {
          super.onPostExecute(result);
          //start activity here
 }

}