碎片不起作用的startActivityForResult

时间:2014-04-01 02:24:23

标签: android android-intent android-fragments android-activity

我几个小时以来一直在与这个问题作斗争,几乎关于这个问题的所有其他帖子都看了但是找不到我错的地方。如果我遗漏了一些简单的东西,请告诉我。

活动1(托管CreateFragment)

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

CreateFragment:

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

ContactPickerActivity:

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

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

任何想法?

谢谢, 森

1 个答案:

答案 0 :(得分:0)

如果你在MainActivity onActivityResult覆盖方法中调用并且你不需要在片段类中进行更改,那么在Fragment类中工作正常。 所以 在Fragment中调用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);
        }

    }
相关问题