OnActivityResult метод не называется Android

Я пытаюсь отправить данные из дочерней активности в родительский. Но почему-то, onActivityResult (..) не вызывается. Вот код

Родительская активность

selectedText.setOnTouchListener(new OnTouchListener() { public boolean onTouch(View v, MotionEvent event) { if (event.getActionMasked() == MotionEvent.ACTION_DOWN) { Intent intent = new Intent(Parents.this,Child.class); startActivityForResult(intent, 1); } return true; } }); @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { switch (requestCode) { case 1: if (resultCode == RESULT_OK) { if (data.hasExtra("selText")) { selectedText.setText(data.getExtras().getString( "selText")); } break; } } 

Child Activity: Я вижу выбранное значение, заданное в setResult (). Но после окончания детской активности он не возвращается к родительской деятельности.

 textListView.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> arg0, View arg1, int myItemInt, long arg3) { selectedFromList =(String) (textListView.getItemAtPosition(myItemInt)); Intent data = new Intent(); data.putExtra("selText", selectedFromList); setResult(RESULT_OK,data); finish(); } }); 

Для тех, кто придерживается той же проблемы, симптом не получать onActivityResult , следующие случаи могут вызвать эту проблему.

  • Убедитесь, что вы используете startActivityForResult() правильно, не используйте startActivity() .
  • Если вы делаете что-то в overriden onBackPressed , super.onBackPressed(); Должен располагаться последним способом, а не в первой строке. (Мое дело потратить 5 часов)
  • android:launchMode="singleInstance" в манифестном или эквивалентном аргументе для создания намерения.
  • Удалить noHistory="true" в манифесте активности вызываемого абонента.
  • Check setResult() пропущен.
  • finish() вызывается для закрытия операции. Используйте finishActivity() чтобы закрыть активность вызываемого абонента.
  • Используйте requestCode более нуля. Отрицательное значение не работает.

Я нашел ошибку. У меня была строка ниже в manifest.xml для детской активности.

  android:launchMode="singleInstance" 

После удаления этой строки. Он работает как шарм !!!

Спасибо всем за ваш вклад и предложения.

Не уверен, что это ваш случай, но при запуске дочерней активности убедитесь, что вы используете startActivityForResult(intent) вместо startActivity();

OnPuase выполнял onActivityResult.

Одним из угловых случаев может быть:
Мой случай был другим и глупым: проблема была в onPause, закончить вызов и завершить действие. Удалил и хорошо работает.

 @Override protected void onPause() { super.onPause(); finish(); // this line causing the issue removed it. } 

Изменение моего манифеста для вызывающей активности от android:launchMode="singleInstance" для android:launchMode="singleTop" исправил проблему для меня.

Используйте singleTop вместо singleInstace как launchMode, так как он поддерживает активность в той же задаче.

Удалите OnActivityResult() в основном классе, он отлично работает … MainActivity – >>>> Фрагменты

И для намерения, которое использовалось для запуска нового Avtivity, нельзя установить флаг Intent.FLAG_ACTIVITY_NEW_TASK, потому что android api сказал: «Этот флаг нельзя использовать, когда вызывающий абонент запрашивает результат при запуске деятельности».