web-dev-qa-db-ja.com

FragmentからstartActivityForResultを呼び出しても、onActivityResultは呼び出されません

DialogActivityから呼び出されるFragmentがあり、2つの画像ボタンでカスタムDialogを表示します。

_DialogActivity.onCreate_で

_final Dialog dialog = new Dialog(this, R.style.DialogTheme);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setContentView(R.layout.dialog_pause); 
dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Android.graphics.Color.TRANSPARENT));
dialog.show();
_

_DialogActivity.onClick_で

_        @Override
        public void onClick(View v) {
            Log.d(LOGTAG, "onClick CONTINUE");

            Intent resultData = new Intent();
            resultData.putExtra("TEST", "return data");
            setResult(666, resultData);
            dialog.cancel();
        }
_

startActivityForResultを呼び出すフラグメント:

_Intent dialogActivityIntent = new Intent(getActivity(), DialogActivity.class);
startActivityForResult(dialogActivityIntent, 999);
_

ActivityFragmentを呼び出すstartActivityForResultでは、次のようになります。

_@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {

    super.onActivityResult(requestCode, resultCode, data);
}
_

ボタンをクリックすると、ダイアログがキャンセルされ、バックグラウンドアクティビティ(フラグメント)が表示されます。

onActivityResult内のonResumeFragment、...への呼び出しがないか、ActivityFragmentが含まれています。

私が試したこと:

両方にonActivityResultを実装するには、FragmentActivityを実装します。これには私のFragmentが含まれます。

知っておくべきこと:

持っているすべてのActivityに属性_noHistory=true_を設定します。

onClickfinish()を実行すると、DialogActivityを呼び出す_Activity/Fragment_も閉じられ、アプリケーションは前のActivityに戻ります。

これは問題かもしれません、私はfinish()を呼び出さないでください...しかし、私がfinish()を呼び出すと、別のActivityActivityを呼び出すstartActivityForResultではありません。

私がチェックしたリンク:

startActivityForResult()はonActivityResult(int requestCode、int resultCode、Intent data)を呼び出さないでください)?

onActivityResult()androidをトリガーできませんか?

startActivityForResultはonActivityResultを呼び出さないようです

onActivityResultは呼び出されません

Android onActivityResultは呼び出されません

アクティビティがフラグメントから開始されたときにonActivityResult()は呼び出されません


すべてが明確に説明されていることを願っています^^。

前もって感謝します。

14
wendigo

属性noHistory=trueを持つアクティビティは、onActivityResult()を介して新しいActivityを起動するときに、startActivityForResult()が呼び出されることはありません。 documentation が言及しているように、noHistory属性がtrueに設定されている場合、finish()Activityで呼び出されます。ユーザーがActivityから移動します。

したがって、startActivityForResult()が呼び出されると、Activityは離れてナビゲートされ、そのfinish()が呼び出され、onActivityResult()への呼び出しを受信しなくなります。 startActivityForResult()を呼び出しているActivityからnoHistory=true属性を削除した場合は、DialogActivityfinish()onClick()を呼び出します。それでも、それを起動したActivityが表示され、onActivityResult()への呼び出しを受信するはずです。

17
ashughes