Android 来自对话框片段的startActivityForResult
在我的应用程序的某个地方,我有一个对话框片段,它启动了activityForResult 当我退出被调用的活动时,不会调用problem-onActivityResult 奇怪的问题-我把调试点放在onActivityResult方法上,它被称为!!!不是在活动结束时,而是在活动完全显示在屏幕上之前 这是我的代码: 这写在对话框片段中Android 来自对话框片段的startActivityForResult,android,android-fragments,android-dialogfragment,onactivityresult,Android,Android Fragments,Android Dialogfragment,Onactivityresult,在我的应用程序的某个地方,我有一个对话框片段,它启动了activityForResult 当我退出被调用的活动时,不会调用problem-onActivityResult 奇怪的问题-我把调试点放在onActivityResult方法上,它被称为!!!不是在活动结束时,而是在活动完全显示在屏幕上之前 这是我的代码: 这写在对话框片段中 btnSelectContacts.setOnClickListener(new OnClickListener() { @Override
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);
}
}
我看到的是意想不到的生命周期行为
调用堆栈如下所示
图像按钮点击
调用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();
Intent结果=新Intent();
ArrayList resultList=contactsAdapter.items;
迭代器iterResultList=resultList.Iterator();
ArrayList结果=新建ArrayList();
//只传递已检查的联系人
while(iterResultList.hasNext()){
ContactData ContactData=iterResultList.next();
如果(contactData.checked){
结果。添加(contactData);
}
}
结果.putParcelableArrayListExtra(ContactData.CONTACTS_DATA,results);
设置结果(Activity.RESULT_OK,RESULT);
完成();
然后调用对话框片段的onResume,而不是预期的onActivityResult
我做错了什么 从片段开始活动:
getActivity().startActivityForResult(intent, code);
要在片段中返回结果,请执行以下操作:
getActivity().startActivityForResult(intent, code);
在父活动(片段调用活动)中:
事实上,如果我在活动中只有一个片段,我的方法很好,但是我有一个片段在片段中,所以你是正确的,我确实需要完成活动,但是,我不需要执行fragmentObject.onActivityResult。。不管怎么说,它确实会被叫来