I am trying to send data from child activity to parent. But somehow, onActivityResult(..) is not getting called. here is code
Parent activity
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: I can see selected value set in the setResult(). But after finish of child activity, it's not going back to parent activity.
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(); } });
To get the result in your fragment make sure you call startActivityForResult(intent,111); instead of getActivity(). startActivityForResult(intent,111); inside your fragment. @StErMi Make sure you call startActivityForResult() and not getActivity(). startActivityForResult() from your fragment.
class); startActivityForResult(i, 100); 2.In your secondActivity class write following code for onClick Event For ex: In secondActivity if you want to send back data: Intent intent= new Intent(); intent. putExtra("result",result); setResult(RESULT_OK,intent); finish();
Among the contracts available, the StartActivityForResult contract is the replacement to the startActivityForResult . The callback is to be called once the activity result is available.
For anyone stuck with same problem, a symptom not to receive onActivityResult
, following cases can cause this issue.
startActivityForResult()
correctly, do not use startActivity()
.onBackPressed
method, super.onBackPressed();
has to be positioned at the last of the method, not at the first line. (my case to spend 5 hours)android:launchMode="singleInstance"
in manifest or equivalent argument to create a intent.noHistory="true"
in manifest of the callee activity.setResult()
is missed.finish()
is called to close the activity. use finishActivity()
to close callee activity.requestCode
more than zero. negative value does not work.I found the mistake. I had below line in manifest.xml for child acitivity.
android:launchMode="singleInstance"
after removing this line. it's working like a charm!!!
Thank You all for your input and suggestions.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With