onActivity Fragment 的结果

我目前有一个基本活动,它托管一个片段。在片段中,我有一个启动联系人选择器的方法。

private void chooseContacts() {
    Intent pickContactIntent = new Intent(Intent.ACTION_PICK,      ContactsContract.Contacts.CONTENT_URI);
    pickContactIntent.setType(ContactsContract.CommonDataKinds.Phone.CONTENT_TYPE);
    startActivityForResult(pickContactIntent, PICK_CONTACT_REQUEST);
}

当此活动返回时,我应该如何捕获结果。我已尝试添加

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    //Handle Code
}

到我的基本活动和片段,但两种方法都没有被触发。如果可能的话,我希望让片段处理返回,以免混淆活动。

请让我知道在这种情况下的最佳实践是什么。

更新:

如果我更改:

startActivityForResult(pickContactIntent, PICK_CONTACT_REQUEST);

getActivity().startActivityForResult(pickContactIntent, PICK_CONTACT_REQUEST);

然后它的工作原理,但其他帖子让我认为这是不正确的。


答案 1

我认为你仍然应该在片段中直接使用调用,没有用。startActivityForResult()getActivity().startActivityForResult()

我调用 in Fragment 并实现 in Fragment,正确调用。startActivityForResult()onActivityResultonActivityResult()

您不能调用 in 活动,否则 in 片段 将不会被调用。startActivityForResult()onActivityResult()


答案 2

就我而言,我在家长活动中这样做了

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

    for (Fragment fragment : getSupportFragmentManager().getFragments()) {
        fragment.onActivityResult(requestCode, resultCode, data);
    }
}

推荐