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