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

Mat*_*hew 5 android

我有一个活动'Activity1'和另一个名为'Activity2'的活动.单击"Activity1"中的按钮后会加载"Activity2".我想显示进度对话框,直到加载新活动.你能告诉我这样做的代码吗?

Sun*_*hoo 2

有两种方法可以

第一种方法使用异步任务

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

*步骤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();
    }

}
Run Code Online (Sandbox Code Playgroud)

步骤2在要跳转到新活动的活动中(例如在ActivityA中)调用AsynTask的execute()

new LoadingDataFromServer(context).execute(null);
Run Code Online (Sandbox Code Playgroud)

第二种方法

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

或者

  • 当线程完成任务时,然后调用下一个活动,传递此对象(进度对话框),并在该新活动内关闭此对话框。