如何使viewActivity从嵌套片段调用onActivityResult
这是一个从活动中获取结果到嵌套片段的着名问题,该活动可能只将结果发送给已直接附加到Activity但不嵌套的Fragment一。这就是为什么无论如何都不会调用嵌套片段的onActivityResult的原因。 在我的情况下,我有一个活动,其中包含一个片段,它有一堆片段的viewPager。 在其中一个viewPager的片段中,我尝试启动一个摄像机意图,这个意图返回的结果永远不会发送到最后一个片段,我尝试了几个我发现的答案,但没有一个是健壮的,其中一个解决方案是创建一个EventBus对象来将活动中的resultCode扩散到所有片段,但它不适用于这种情况,任何帮助?如何使viewActivity从嵌套片段调用onActivityResult
我可能有一个工作解决方案,因为我曾经处于非常相似的情况。
简而言之,我停止依靠的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
(如果实例化)都会收到结果。