startActivityForResult from Fragment 不起作用



我已经与这个问题斗争了几个小时,并且几乎查看了有关此问题的所有其他帖子,但找不到我出错的地方。 如果我错过了一些简单的东西,请告诉我。

活动 1(托管创建片段)

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    ((CreateFragment) getFragmentManager().findFragmentByTag(CreateFragment.TAG)).resultReturned(requestCode, resultCode, data);
}

创建片段:

private void chooseContact() {
    Intent chooseContactInappIntent = new Intent( getActivity(), ContactPickerActivity.class );
    getActivity().startActivityForResult( chooseContactInappIntent, PICK_CONTACT_REQUEST );
}
 public void resultReturned( int requestCode, int resultCode, Intent data ) {
    switch ( requestCode ) {
        case PICK_CONTACT_REQUEST:
            if ( resultCode == Activity.RESULT_OK ) {
               //Do Cool Things
        default:
            break;
    }
}

联系选择活动:

@Override
public void onContactSelected( Object data) {
    Intent returnIntent = new Intent();
    returnIntent.putExtra("data",data);
    setResult(RESULT_OK,returnIntent);
    finish();
}

Activity One 托管一个 CreateFragment,当用户单击创建片段中的按钮时,该片段将调用 chooseContact() 方法,该方法将启动一个新的 ActivityForResult。 然后,联系人选取器活动向用户显示联系人列表。 当用户选择联系人时,将调用 onContactSelected 方法创建一个新意图来传回所选数据,然后调用 finish。 我以为这会在基本活动中调用onActivityResult或CreateFragment,但两者都没有调用。

有什么想法吗?

谢谢内森

在片段中,如果你在 MainActivity onActivityResult 覆盖方法调用,并且你不需要在片段类中进行更改,则可以正常工作。所以在调用 startActivityForResult 的片段中,如下所示:

@Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (resultCode == RESULT_OK && (requestCode == GALLERY_REQUEST || requestCode == CAMERA_REQUEST)) {
          // its not complicated .....    
        }
}

在 MainActivity 类中,还必须调用 onActivityResult 。

  @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);
        }
    }

最新更新