Somewhere in my app i have a Dialog fragment, that starts an activityForResult
The problem - onActivityResult does no get called when i exit the called activity
The stranger problem - i put debug points on the onActivityResult method, it is called!!! just not when the activity ends, but BEFORE the activity is displayed fully on the screen
This is my code:
this is written in the dialog fragment
btnSelectContacts.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent contactPicker = new Intent(getActivity(), ContactPickerActivity.class);
contactPicker.putExtra(ContactData.CHECK_ALL, false);
startActivityForResult(contactPicker, REQ_SELECT_CONTACTS);
}
});
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (data != null && data.hasExtra(ContactData.CONTACTS_DATA)) {
data.setAction(IntentKeys.CONTACTS);
getActivity().sendBroadcast(data);
}
}
What i am seeing is unexpected life cycle behaviour the call stack goes like this
ImageButton click ImageButton onClickListener called startActivityForResult onActivityResult of the activity it is in, of the dialog fragment it is in, of the fragment itself is called onResume of the called activity is called called activity does
Intent result = new Intent();
ArrayList<ContactData> resultList = contactsAdapter.items;
Iterator<ContactData> iterResultList = resultList.iterator();
ArrayList<ContactData> results = new ArrayList<ContactData>();
//pass only checked contacts
while(iterResultList.hasNext()) {
ContactData contactData = iterResultList.next();
if(contactData.checked) {
results.add(contactData);
}
}
result.putParcelableArrayListExtra(ContactData.CONTACTS_DATA, results);
setResult(Activity.RESULT_OK, result);
finish();
and then just onResume of the dialog fragment is called instead of the expected onActivityResult
what am i doing wrong?!
to start activity from fragment :
getActivity().startActivityForResult(intent, code);
to get result back in fragment :
in your parent activity (fragment call activity) :
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
fragmentObject
.onActivityResult(requestCode, resultCode, data);
}
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