9

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 の終了時にダイアログを表示することだけです。

ご協力いただきありがとうございます。

4

3 に答える 3

9

あなたが示唆するようstartActivityForResultに、起動時に電話してくださいActivity2。次に、オーバーライドonActivityResultして をチェックしRESULT_OK、ダイアログ ボックスを表示します。これは、やりたいことを実行するための完全に受け入れられる慣行です。

于 2012-06-21T17:01:13.543 に答える
0

onResumeメソッドを使用できます(activity2から何も検索していない場合)

@Override
public void onResume(){
    super.onResume();
    //do something
}
于 2012-06-21T17:09:51.517 に答える
0

ルート アクティビティである MainActivity に戻り、いくつかのアクティビティを閉じてから、ダイアログを表示する必要があります。だから私は別の方法を選択しました。

MyDialog {
    public static synchronized void planToShowDialog(String info) {
        if (info != null) {
            saveInfoToPreferences(info);
        }
    }

    public static synchronized void showDialogIfNecessary(Context context) {
        String info = readInfoFromPreferences(); 
        if (info != null) {
            saveInfoToPreferences(null); // Show dialog once for given info.
            new MyDialog(context, info).show();
        }
    }

    private static String readInfoFromPreferences() {
        //...
    }

    private static void saveInfoToPreferences(String info) {
        //...
    }
}

MainActivity.onPostResume() メソッドから MyDialog.showDialogIfNecessary() を呼び出します。

于 2013-05-07T09:42:42.710 に答える