Вызов 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() не вызывается, когда активность запущена из фрагмента
Я надеюсь, что все ясно объяснено ^^.
Спасибо заранее.
Ответы
Ответ 1
Действия, имеющие атрибут noHistory=true
, никогда не будут иметь свой onActivityResult()
, вызываемый при запуске нового Activity
через startActivityForResult()
. Как упоминается документация, если для атрибута noHistory
установлено значение true
, тогда finish()
вызывается в Activity
, когда пользователь переходит от Activity
.
Итак, когда вызывается startActivityForResult()
, объект Activity
перемещается от него, вызывая его finish()
, и он никогда не получает вызов onActivityResult()
. Если вы удалите атрибут noHistory=true
из Activity
, вызывающий startActivityForResult()
, затем вызовите finish()
в DialogActivity
onClick()
, тогда вы все равно увидите Activity
, который запустил его, а также получите вызов onActivityResult()
.