3

私には2つの活動があります。意図的に2番目のアクティビティに切り替える場合、SQLiteなどからデータをフェッチするアダプターを備えたコンポーネントが多数あるため、3〜4秒かかります。したがって、切り替え中に進行状況ダイアログを表示したいと思います。

私はこの目的のためにトピックを掘り起こし、それらの多くを試しました:

1-)2番目のアクティビティでAsyncTaskを使用します。コンポーネントをクリックして2番目のアクティビティに切り替えるとすぐに、進行状況ダイアログが表示されません。3〜4秒待ってから、進行状況ダイアログが1秒未満表示されますが、これはユーザーフレンドリーな方法ではありません。

2-)最初のアクティビティでAsyncTaskを使用します。そのコンポーネントをクリックするとすぐに表示されますが、プログレスホイールは回転しません。進行状況ダイアログがフリーズします。

3-)2番目のアクティビティでAsyncTask onStart()メソッドを使用します。これが最初の方法です。

以下のコードは、最初のアクティビティでAsyncTaskを使用して、上記の2番目の方法を実装します。

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 コンテキストを渡してstartingThread AsyncTask、開始アクティビティ コードonPostExecute()を AsyncTask に配置します。

@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 が機能する時間がありません。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 に答える