应用程序的结构是这样的:
tabHost (in Activity) -> contains -> TabFragment(extend base container fragment)
<强>1。 Activity中的代码:
tabHost.addTab(
tabHost.newTabSpec("home").setIndicator("",
getResources().getDrawable(R.drawable.btn_home)),
HomeFragment.class, null);
<强>2。 HomeFragment中的代码 (注意 HomeFragment 不是实际函数,而是像这样的容器,它扩展了 BaseContainerFragment):
public class HomeFragment extends BaseContainerFragment {
public Home homeFrag;
private boolean mIsViewInited;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.container_fragment, null);
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
if (!mIsViewInited) {
mIsViewInited = true;
initView();
}
}
private void initView() {
homeFrag = new Home();
replaceFragment(homeFrag, false);
}
}
<强>3。 BaseContainerFragment
public class BaseContainerFragment extends Fragment {
public void replaceFragment(Fragment fragment, boolean addToBackStack) {
FragmentTransaction transaction = getChildFragmentManager().beginTransaction();
if (addToBackStack) {
transaction.addToBackStack(null);
}
transaction.replace(R.id.container_framelayout, fragment);
transaction.commit();
}
public boolean popFragment() {
boolean isPop = false;
if (getChildFragmentManager().getBackStackEntryCount() > 0) {
isPop = true;
getChildFragmentManager().popBackStack();
}
return isPop;
}
}
<强>4。在首页( fragment 的实际内容)
UploadType fragment = new UploadType();
Bundle bundle = new Bundle();
bundle.putString("form_type", "request");
fragment.setArguments(bundle);
((BaseContainerFragment)getParentFragment()).replaceFragment(fragment, true);
<强>5。在 UploadType 中,我调用了相机 Activity ,但 onActivityResult 仅在主 Activity 中返回。
startActivityForResult(intent, REQUEST_CAMERA);
public void onActivityResult(int requestCode, int resultCode, Intent data) {
Log.d("test1", "result2");
super.onActivityResult(requestCode, resultCode, data);
}
如何在 UploadType 触发 onActivityResult?感谢您的帮助。
最佳答案
这不起作用的原因是因为您从嵌套 fragment 中调用 startActivityForResult()
。 Android 足够聪明,可以将结果路由回 Activity
甚至 Fragment
,但不会路由到嵌套的 Fragment
,因此您为什么不这样做得到回调。
(有关为什么这不起作用的更多信息 here 或 stackoverflow )
现在,为了使其正常工作,我建议您手动将回调路由到 ParentFragment
(= BaseContainerFragment
):
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
Fragment uploadType = getChildFragmentManager().findFragmentById(R.id.container_framelayout);
if (uploadType != null) {
uploadType.onActivityResult(requestCode, resultCode, data);
}
super.onActivityResult(requestCode, resultCode, data);
}
关于android - onActivityResult 不在 Fragment 中调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28496682/