Activity 已包含一層 Fragment,需在該 Fragment 內再使用 FragmentTabHost 承載多個子 Fragment。
getChildFragmentManager() 而非 getFragmentManager() / getSupportFragmentManager()。setup(context, childFragmentManager, containerId)。tabHost.addTab(tabSpec, FragmentClass.class, args)。
public class ParentFragment extends Fragment {
private FragmentTabHost tabHost;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View root = inflater.inflate(R.layout.fragment_parent, container, false);
tabHost = root.findViewById(android.R.id.tabhost);
tabHost.setup(getActivity(), getChildFragmentManager(), R.id.tab_content);
tabHost.addTab(tabHost.newTabSpec("tab1").setIndicator("Tab 1"), ChildFragment1.class, null);
tabHost.addTab(tabHost.newTabSpec("tab2").setIndicator("Tab 2"), ChildFragment2.class, null);
return root;
}
@Override
public void onDestroyView() {
super.onDestroyView();
tabHost = null; // 避免內存洩漏
}
}
drawerNavigation被fragment overlay, FragmentTabHost使用
FragmentTabHost+fragment中獲得fragment的對象
Android之Fragment的使用(一)