3

我有两个活动。当按意图切换到第二个活动时,它需要 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,但没有成功。因此,我正在等待您对这个问题的意见和建议。任何帮助将不胜感激。

谢谢。

4

2 回答 2

2
I also tried to call startActivity in onPostExecute,

将 Activity 上下文传递给AsyncTaskstartingThread 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-16T07:59:38.463 回答
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();

    }
}
于 2012-11-16T07:59:20.827 回答