片段中的 startActivityForResult 不工作

Posted

技术标签:

【中文标题】片段中的 startActivityForResult 不工作【英文标题】:startActivityForResult From Fragment Not Working 【发布时间】: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,但两者都没有被调用。

有什么想法吗?

谢谢, 内森

【问题讨论】:

【参考方案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);
        

    

【讨论】:

以上是关于片段中的 startActivityForResult 不工作的主要内容,如果未能解决你的问题,请参考以下文章

片段中的片段

操作栏标签片段中的片段?

片段对话框中的片段膨胀引发错误“片段未创建视图”

当前一个片段中的某些任务完成时如何通知另一个片段中的适配器

如何处理片段和活动中的后压

从另一个片段中的目录更新片段中的列表视图元素