【问题标题】:startActivityForResult From Fragment Not Working片段中的 startActivityForResult 不工作
【发布时间】:2014-05-11 14:59:31
【问题描述】:

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

活动 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);
}

创建片段:

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 方法创建一个新的意图来传回所选数据,然后调用完成。我认为这会调用基础活动中的 onActivityResult 或 CreateFragment,但两者都没有被调用。

有什么想法吗?

谢谢, 内森

【问题讨论】:

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


    【解决方案1】:

    如果您在 MainActivity 调用 onActivityResult 覆盖方法并且您不需要在片段类内部进行更改,则在 Fragment 类中工作正常。 所以 在像这样调用 startActivityForResult 的 Fragment 中:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-21
      • 2016-09-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-11
      相关资源
      最近更新 更多