Я искал везде, и есть похожие сообщения об этом, но не могу найти решение!
Моя ситуация: у меня есть Activity A, который содержит fragment
, и из этого fragment
я хочу начать новый Activity
B, который должен возвращать некоторые значения в fragment
.
На fragment
startActivityForResult(mapIntent, ConstantsUtils.TOMAP_REQUEST_CODE);
На Activity
B, чтобы вернуть данные
Intent returnIntent = new Intent();
returnIntent.putExtra(SerializationConstants.isSearchSaved, mAbItemsShown.ordinal());
setResult (ConstantsUtils.SUCCESS_RETURN_CODE, returnIntent);
finish();
На фрагменте
@Override
public void onActivityResult(int requestCode, int resultCode, Intent intent) {
super.onActivityResult(requestCode, resultCode, intent);
switch (requestCode) {
case ConstantsUtils.TOMAP_REQUEST_CODE:
if (resultCode == ConstantsUtils.SUCCESS_RETURN_CODE) {
//do some stuff
}
}
}
onActivityResult
из fragment
успешно вызывается с правильным requestCode
, но resultCode
всегда 0, а намерение всегда null
.
У меня нет другой реализации onActivityResult
под Activity
A.
На самом деле, я также пытаюсь начать activity
с fragment
с getActivity().startActivityForResult(mapIntent, ConstantsUtils.TOMAP_REQUEST_CODE);
и реализовать onActivityResult
на Activity
А, но получается то же самое, правильно requestCode
, но неправильно resultCode
и intent
.
Я использую Sherlock Action Bar
, поэтому мой fragment
— это SherlockListFragment
, поэтому я использую support library (r18)
.
Можете вы помочь мне? Спасибо
super.onActivityResult(requestCode, resultCode, intent);
. Не нужно, на мой взгляд. Кроме того, ваш request_code должен быть ›= 0, как упоминается [здесь][doc][doc]: developer.android.com/reference/android/app/, int) - person Owen Zhao   schedule 29.08.2013finish()
где-то еще в ActivityB. Вызовfinish()
без установки кода результата и данных результата приведет к именно тому поведению, которое вы описываете. Либо это, либо ActivityB падает, это будет делать то же самое. - person David Wasser   schedule 30.08.2013onStart()
илиonResume
. Если вы создадите новые экземпляры фрагмента, в котором вы вызвалиstartActivityForResult
, это будет проблемой. Обычно Android автоматически восстанавливает предыдущее состояние, когда вы выполняете действие B, вызываяfinish()
. Итак, если вы создадите другой экземпляр фрагмента вручную, он заменит того, кто получит возвращенный Intent. - person Owen Zhao   schedule 30.08.2013