来自对话框片段的startActivityForResult

时间:2014-12-08 10:01:01

标签: 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);
             }

            }

我所看到的是意外的生命周期行为 调用堆栈就像这样

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();

然后只调用对话框片段的onResume而不是预期的onActivityResult

我做错了什么?!

1 个答案:

答案 0 :(得分:7)

从片段开始活动:

getActivity().startActivityForResult(intent, code);

将结果返回片段:

父活动中的

(片段调用活动):

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {

    fragmentObject
            .onActivityResult(requestCode, resultCode, data);
}