Android 来自对话框片段的startActivityForResult

Android 来自对话框片段的startActivityForResult,android,android-fragments,android-dialogfragment,onactivityresult,Android,Android Fragments,Android Dialogfragment,Onactivityresult,在我的应用程序的某个地方,我有一个对话框片段,它启动了activityForResult 当我退出被调用的活动时,不会调用problem-onActivityResult 奇怪的问题-我把调试点放在onActivityResult方法上,它被称为!!!不是在活动结束时,而是在活动完全显示在屏幕上之前 这是我的代码: 这写在对话框片段中 btnSelectContacts.setOnClickListener(new OnClickListener() { @Override

在我的应用程序的某个地方,我有一个对话框片段,它启动了activityForResult

当我退出被调用的活动时,不会调用problem-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);
             }

            }
我看到的是意想不到的生命周期行为 调用堆栈如下所示

图像按钮点击 调用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。。不管怎么说,它确实会被叫来