Activity1 と Activity2 という 2 つのアクティビティがあるとします。
Activity1 の onClick() メソッドでは、特定のボタンが押された場合に Activity 2 を開始する呼び出しがあります。
Intent myIntent = new Intent(Activity1.this, Activity2.class);
Activity1.this.startActivity(myIntent);
Activity2 で finish() が呼び出され、Activity1 が再開された後、Activity1 が再開されたらすぐにダイアログを表示する必要があります。
前に、Activity1 の onClick() メソッドの同じブロックで単に showDialog(id) を呼び出しました。
public void onClick(View v) {
if(v == addHole){
//...
Intent myIntent = new Intent(Activity1.this, Activity2.class);
Activity1.this.startActivity(myIntent);
showDialog(END_DIALOG_ID);
}
}
問題は、Activity1 が再開した後、END_DIALOG_ID に対応するダイアログが表示されず、戻るキーを押すまで、画面が暗くなり、(ダイアログが存在するかのように) 応答しなくなることです。
Activity1 の onResume() メソッドと onRestart() メソッドに showDialog() 呼び出しを入れてみましたが、どちらもプログラムがクラッシュします。
また、onPostExecute() で showDialog() 呼び出しを使用して、Activity2 で AsyncTask メソッドを作成しようとしましたが、Activity2 でダイアログが表示されません。
private class ShowDialogTask extends AsyncTask<Void, Void, Integer> {
/** The system calls this to perform work in a worker thread and
* delivers it the parameters given to AsyncTask.execute() */
protected Integer doInBackground(Void... id) {
//do nothing
return END_DIALOG_ID;
}
/** The system calls this to perform work in the UI thread and delivers
* the result from doInBackground() */
protected void onPostExecute(Integer id) {
super.onPostExecute(id);
showDialog(id);
}
}
私は今、呼び出してこれを実装しようとしています
Activity1.this.startActivityForResult(myIntent, END_DIALOG_REQUEST);
Activity1 の対応する setResult() および onActivityResult() メソッドを使用しますが、これを実装するためのより良い方法があるようです。必要なのは、Activity2 の終了時にダイアログを表示することだけです。
ご協力いただきありがとうございます。