Подтвердить что ты не робот

Вызов startActivityForResult из Fragment не вызывает onActivityResult

У меня есть DialogActivity, который вызывается из Fragment для отображения пользовательского 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);

В Activity и Fragment, который вызывает startActivityForResult:

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

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

Когда я нажимаю кнопку, я только отменяю диалог и показывает фоновую активность (фрагмент).

Нет вызова onActivityResult, onResume,... в Fragment или Activity содержит Fragment.

Вещи, которые я пробовал:

Чтобы реализовать onActivityResult в обоих, Fragment и Activity, который содержит мой Fragment.

Что нужно знать:

Я устанавливаю атрибут noHistory=true в каждом Activity, который у меня есть.

Если я делаю finish() в onClick, то Activity/Fragment, вызывающий DialogActivity, тоже закрывается, и приложение возвращается к Activity.

Это может быть проблема, я НЕ звоню finish()... но если я вызываю finish(), он выходит на другой Activity, а не Activity, который вызывает startActivityForResult.

Ссылки, которые я проверил:

startActivityForResult() не вызывать onActivityResult (int requestCode, int resultCode, Intent data)?

Не удается запустить onActivityResult() android?

startActivityForResult, похоже, не вызывает onActivityResult

onActivityResult никогда не вызывается

Android onActivityResult никогда не вызывал

onActivityResult() не вызывается, когда активность запущена из фрагмента


Я надеюсь, что все ясно объяснено ^^.

Спасибо заранее.

4b9b3361

Ответ 1

Действия, имеющие атрибут noHistory=true, никогда не будут иметь свой onActivityResult(), вызываемый при запуске нового Activity через startActivityForResult(). Как упоминается документация, если для атрибута noHistory установлено значение true, тогда finish() вызывается в Activity, когда пользователь переходит от Activity.

Итак, когда вызывается startActivityForResult(), объект Activity перемещается от него, вызывая его finish(), и он никогда не получает вызов onActivityResult(). Если вы удалите атрибут noHistory=true из Activity, вызывающий startActivityForResult(), затем вызовите finish() в DialogActivity onClick(), тогда вы все равно увидите Activity, который запустил его, а также получите вызов onActivityResult().