我有两个活动。当按意图切换到第二个活动时,它需要3-4秒,因为它有很多带有从SQLite等获取数据的适配器的组件。因此,我想在切换时显示一个进度对话框。
为此,我一直在挖掘主题,并尝试了其中的许多:
1-)在第二个活动中使用AsyncTask。当我单击一个组件切换到第二个活动时,它不会立即显示进度对话框。它等待3-4秒,然后进度对话框显示不到一秒,这不是用户友好的方式。
2)在第一个活动中使用AsyncTask。只要我点击该组件,它就会显示出来,但是进度轮没有旋转。进度对话框会冻结。
3-)对第二个活动使用AsyncTask onStart()方法。这就是第一种方法的结果。
下面的代码实现了上面的第二种方法,在第一个活动上使用AsyncTask。
public void toVisitRegister(Event event) { //Switching to the second activity
new startingThread().execute();
Intent toVisitRegister = new Intent(MainCalendar.this, VisitRegister.class);
startActivity(toVisitRegister);
finish();
}这是AsyncTask
public class startingThread extends AsyncTask<String, String, String> {
@Override
protected void onPreExecute() {
super.onPreExecute();
startingProgress = new ProgressDialog(MainCalendar.this);
startingProgress.setTitle("Visit Register");
startingProgress.setMessage("Initializing...");
startingProgress.show();
}
@Override
protected String doInBackground(String... params) {
return null;
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
if(MainCalendar.this.startingProgress != null) {
MainCalendar.this.startingProgress.dismiss();
}
}
}我还尝试在onPostExecute中调用startActivity,但没有成功。因此,我期待着您对这个问题的意见和建议。任何帮助都将不胜感激。
谢谢。
发布于 2012-11-16 15:59:38
I also tried to call startActivity in onPostExecute,将活动上下文传递给startingThread AsyncTask,并将启动活动代码放入AsyncTask的onPostExecute()中。
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
if(MainCalendar.this.startingProgress != null) {
MainCalendar.this.startingProgress.dismiss();
Intent toVisitRegister = new Intent(MainCalendar.this, VisitRegister.class);
mContext.startActivity(toVisitRegister);
mContext.finish();
}
}这里的mContext是您当前MainCalendar活动的上下文。
发布于 2012-11-16 15:59:21
查看您的实现,AsyncTask将没有时间工作,因为您将立即跳到下一个活动。尝试调用PostExecute()中的下一个活动。
I also tried to call startActivity in onPostExecute, but it didn't work. 你是这样做的吗:
public void toVisitRegister(Event event) { //Switching to the second activity
new startingThread().execute();
}
public class startingThread extends AsyncTask<String, String, String> {
@Override
protected void onPreExecute() {
super.onPreExecute();
startingProgress = new ProgressDialog(MainCalendar.this);
startingProgress.setTitle("Visit Register");
startingProgress.setMessage("Initializing...");
startingProgress.show();
}
@Override
protected String doInBackground(String... params) {
return null;
}
@Override
protected void onPostExecute(String result) {
if(MainCalendar.this.startingProgress != null) {
MainCalendar.this.startingProgress.dismiss();
}
Intent toVisitRegister = new Intent(MainCalendar.this, VisitRegister.class);
startActivity(toVisitRegister);
finish();
}
}https://stackoverflow.com/questions/13412515
复制相似问题