来自对话框片段的startActivityForResult

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

我究竟做错了什么?!

Mur*_*ain 7

从片段开始活动:

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)