1

这是一个从活动中获取结果到嵌套片段的着名问题,该活动可能只将结果发送给已直接附加到Activity但不嵌套的Fragment一。这就是为什么无论如何都不会调用嵌套片段的onActivityResult的原因。 在我的情况下,我有一个活动,其中包含一个片段,它有一堆片段的viewPager。 在其中一个viewPager的片段中,我尝试启动一个摄像机意图,这个意图返回的结果永远不会发送到最后一个片段,我尝试了几个我发现的答案,但没有一个是健壮的,其中一个解决方案是创建一个EventBus对象来将活动中的resultCode扩散到所有片段,但它不适用于这种情况,任何帮助?如何使viewActivity从嵌套片段调用onActivityResult

回答

0

我可能有一个工作解决方案,因为我曾经处于非常相似的情况。

简而言之,我停止依靠的onActivityResult()依靠并实现了我自己的工作逻辑。

您应该信任的唯一onActivityResult()是您的Activity之一。

您可以创建一个interface这样一个

public interface ActivityResultDispatcher { 
    // Pass anything you want, Bundle, Intent, ecc... 
    // For the sake of simplicity I'm using Bundle... 
    public void dispatchResultData(final Bundle data); 
} 

,有你Fragment类实现它。

Activity之间的通信您主要Fragment应该是很容易的,你可以做这样的事情(在你的Activity):

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    final Bundle bundle = new Bundle(); 
    // put data inside Bundle 
    this.primaryFrament.dispatchResultData(bundle); 
} 

现在,您的主要Fragment是保存在一个ViewPager与其他Frament类。

因此,在您的主Fragment你会做什么:

@Override public void dispatchResultData(final Bundle data) { 

    for (int i = 0; i < MyViewPager.NUM_FRAGMENTS; i++) { 
     final ActivityResultDispatcher subFragment = (ActivityResultDispatcher) this.retrieveFragment(i); 

     // some fragments in ViewPager may be dynamically deleted 
     if (subFragment != null) { 
      subFragment.dispatchResultData(data); 
     } 
    } 
} 

功能retrieveFragment(final int position)是一个非常舒适的一段代码,我在网上找到。

ViewPager是这样的一种实现:

public Fragment retrieveFragment(final int position) { 
    return this.fragmentManager.findFragmentByTag("android:switcher:" + R.id.my_pager_id + ":" + position); 
} 

所有有效Fragment类的ViewPager将接收Bundle,您可以决定用它做什么。

您可以传递更多的信息,调度员,如

public void dispatchResultData(final Bundle data, final int requestCode); 

,有你Fragment决定是否应该回答的函数调用。

您基本上已经构建了一个完整的完整工作的onActivityResult()实用程序,并且可以确保您的所有Fragments(如果实例化)都会收到结果。

相关问题