startActivityForResult onActivityResult in a片段"未调用"

时间:2014-06-20 19:21:51

标签: android android-fragments

我打电话的时候:

private void openGallery() {
    Intent intent = new Intent();
    intent.setType("image/*");
    intent.setAction(Intent.ACTION_GET_CONTENT);
    getActivity().startActivityForResult(Intent.createChooser(intent, "Select Picture"),
            PICK_IMAGE);
}

永远不要执行:

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

我也实现了这个:

//  @Override
//  public void startActivityForResult(Intent intent, int requestCode) {
//      // TODO Auto-generated method stub
//      super.startActivityForResult(intent, requestCode);
//      
//  }

但仍无效。

我有这个结构 ActionBarAcitivy - > FragmentPagerAdapter - > 片段 - > 片段 - >这里startActivityForResult“片段

请注意,此代码扩展了“片段”

此邮件无法解决!

  

经验后注意:

     

不存在任何形式,我在这个问题上花了3天,还有-1个片段,我把所有这些都放在了一个活动中(actionbaractivity)

     

我不打算使用很多片段,程序员不能做的就是浪费时间去发现虚构的代码。

2 个答案:

答案 0 :(得分:1)

这一行是问题所在:

getActivity().startActivityForResult(Intent.createChooser(intent, "Select Picture"),
        PICK_IMAGE);

相反,您应该在片段上调用此方法,而不是在 activity 上调用此方法。这允许系统将响应路由回正确的片段。所以只需将其替换为:

startActivityForResult(Intent.createChooser(intent, "Select Picture"),
        PICK_IMAGE);

链接到文档以供参考:http://developer.android.com/reference/android/support/v4/app/FragmentActivity.html#startActivityFromFragment

答案 1 :(得分:1)

要记住几个关键概念:

  • 嵌套片段无法处理onActivityResult ,只有第一级片段可以(即您直接添加到活动中的片段),详情here
  • 您必须使用 fragment.startActivityForResult 来获取onActivityResult中的结果。如果你做activity.startActivityForResult,你永远不会在你的片段中得到结果
  • 你的onActivityResult方法中的
  • (全部)总是调用super.onActivityResult