我有两项活动。虽然通过意图切换到第二个活动,但它需要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,但它没有用。因此,我正在等待你对这个问题的看法和建议。任何帮助将不胜感激。
感谢。
答案 0 :(得分:2)
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
活动的上下文。
答案 1 :(得分:1)
查看您的实现,AsyncTask没有时间工作,因为您将立即跳转到下一个Activity。尝试在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();
}
}