我有一个名为“Activity1”的活动,还有另一个名为“Activity2”的活动。在“Activity1”中单击按钮后加载“Activity2”。我想要显示进度对话框,直到新的活动被加载。请问您能否向我展示如何编写代码实现这个功能?
我有一个名为“Activity1”的活动,还有另一个名为“Activity2”的活动。在“Activity1”中单击按钮后加载“Activity2”。我想要显示进度对话框,直到新的活动被加载。请问您能否向我展示如何编写代码实现这个功能?
onCreate
方法中显示进度对话框,然后在AsyncTask中执行所有耗时加载。在AsyncTask的onPostExecute()
方法中关闭进度对话框。使用AsynTask<>,您可以获得您的结果。
在OnPreExecute中显示进度对话框,在OndoInBackground中运行您的活动,在onPostExecute中删除您的对话框。
了解更多请参考此链接
有两种方法
第一种方法:使用Async Task
如果你正在进行耗时的任务,例如从服务器加载数据或解析xml,则使用AsynTask<>。如果你想从ActivityA调用ActivityB,则需要执行以下步骤:
*步骤1*创建一个AsyncTask类。在doBackground()
方法中编写所有后台任务,在任务完成后,你想要调用一个activity,将代码编写到onPostExecute()
post execute方法中。
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();
}
}
步骤2 在你想要跳转到新活动的活动中(例如在ActivityA中),调用AsynTask的execute()方法。
new LoadingDataFromServer(context).execute(null);
第二种方法
或者
你可以通过AsyncTask来实现。将需要执行时间的代码放入
doInBackground()
重写asyncTask的方法并将
startActivity(intent) ----放入onPostExecute()中即可。
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
}
}