onActivityResult 从未在我的嵌套片段中调用
onActivityResult never called in my nested fragment
我有很多嵌套片段。
- Activity一个
- MainFragment(在 FrameLayout 中)
- Fragment A(在 MainFragment 的 FrameLayout 中)
- Fragment B(在 MainFragment 的 FrameLayout 中)
- 片段 C(在片段 B 的 ViewPager 中)
- Fragment D(在 Fragment B 的 ViewPager 中)<--- 这是我想要了解的地方ActivityResult
这就是我开始 activity 结果的方式:
startActivityForResult(Intent.createChooser(intent, "Title"), FILE_PICK);
我没有在其他任何地方覆盖 onActivityResult
。我试图在 Activity A 中调用它,它被调用了,但是即使我调用了 super,它也从未出现在 Fragment D 中。还尝试在 MainFragment
中调用 onActivityResult
但它从来没有也在那里被调用。
事件将在 activity 中接收。要在片段 D 中使用它,您必须传播它。
在你的父 activity 上覆盖 onActivityResult
并开始调用你的片段的 onActivityResult
:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
List<Fragment> fragments = fragmentManager.getFragments();
if(fragments != null){
for(Fragment fragment : fragments){
fragment.onActivityResult(requestCode, resultCode, data);
}
}
}
在你的父片段中你必须做同样的事情,但记得使用 getChildFragmentManager
来获取片段的片段管理器
List <Fragment> fragments = getChildFragmentManager().getFragments();
为了在 FragmentD 上调用 onActivityResult 覆盖父 activity 中的 onActivityResult,例如:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Fragment fragmentD = getSupportFragmentManager().findFragmentByTag("FRAGMENT_D_TAG");
if (fragmentD != null) {
fragmentD.onActivityResult(requestCode, resultCode, data);
}
}
我有很多嵌套片段。
- Activity一个
- MainFragment(在 FrameLayout 中)
- Fragment A(在 MainFragment 的 FrameLayout 中)
- Fragment B(在 MainFragment 的 FrameLayout 中)
- 片段 C(在片段 B 的 ViewPager 中)
- Fragment D(在 Fragment B 的 ViewPager 中)<--- 这是我想要了解的地方ActivityResult
- MainFragment(在 FrameLayout 中)
这就是我开始 activity 结果的方式:
startActivityForResult(Intent.createChooser(intent, "Title"), FILE_PICK);
我没有在其他任何地方覆盖 onActivityResult
。我试图在 Activity A 中调用它,它被调用了,但是即使我调用了 super,它也从未出现在 Fragment D 中。还尝试在 MainFragment
中调用 onActivityResult
但它从来没有也在那里被调用。
事件将在 activity 中接收。要在片段 D 中使用它,您必须传播它。
在你的父 activity 上覆盖 onActivityResult
并开始调用你的片段的 onActivityResult
:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
List<Fragment> fragments = fragmentManager.getFragments();
if(fragments != null){
for(Fragment fragment : fragments){
fragment.onActivityResult(requestCode, resultCode, data);
}
}
}
在你的父片段中你必须做同样的事情,但记得使用 getChildFragmentManager
来获取片段的片段管理器
List <Fragment> fragments = getChildFragmentManager().getFragments();
为了在 FragmentD 上调用 onActivityResult 覆盖父 activity 中的 onActivityResult,例如:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Fragment fragmentD = getSupportFragmentManager().findFragmentByTag("FRAGMENT_D_TAG");
if (fragmentD != null) {
fragmentD.onActivityResult(requestCode, resultCode, data);
}
}