Len*_*Bru 2 android android-fragments android-dialogfragment onactivityresult
在我的应用程序的某个地方,我有一个Dialog片段,它启动了一个activityForResult
问题 - 当我退出被调用的活动时,onActivityResult没有被调用
陌生人的问题 - 我把调试点放在onActivityResult方法上,它被称为!!! 只是不在活动结束时,而是在活动完全显示在屏幕上之前
这是我的代码:
这是在对话框片段中写的
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);
}
}
Run Code Online (Sandbox Code Playgroud)
我所看到的是调用堆栈的意外生命周期行为
ImageButton单击ImageButton onClickListener,调用它所在的活动的startActivityForResult onActivityResult,它所在的对话框片段,片段本身被调用onResume被调用的活动称为活动吗?
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();
Run Code Online (Sandbox Code Playgroud)
然后只调用对话框片段的onResume而不是预期的onActivityResult
我究竟做错了什么?!
从片段开始活动:
getActivity().startActivityForResult(intent, code);
Run Code Online (Sandbox Code Playgroud)
将结果返回到片段中:
在您的父活动(片段调用活动)中:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
fragmentObject
.onActivityResult(requestCode, resultCode, data);
}
Run Code Online (Sandbox Code Playgroud)