Я пытаюсь отправить данные из дочерней активности в родительский. Но почему-то, 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()
. onBackPressed
, super.onBackPressed();
Должен располагаться последним способом, а не в первой строке. (Мое дело потратить 5 часов) android:launchMode="singleInstance"
в манифестном или эквивалентном аргументе для создания намерения. noHistory="true"
в манифесте активности вызываемого абонента. 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 сказал: «Этот флаг нельзя использовать, когда вызывающий абонент запрашивает результат при запуске деятельности».