所以这就是我解决的方法:
MainActivity.xml
<RelativeLayout> <frameLayout android:id="@+id/container" android:layout_width="match_parent" android:layout_height="match_parent"/></RelativeLayout>
MainActivity.java
public class MainActivity extends FragmentActivity { final FragmentContainer [] fragmentContainers = new FragmentContainer[3]; int currentTabIndex = -1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); final FragmentmetaData [] fragmentContainersmetaData = { new FragmentmetaData(FragmentA.class.getName(), null), new FragmentmetaData(FragmentB.class.getName(), null), new FragmentmetaData(FragmentC.class.getName(), null) }; for (int i = 0; i < fragmentContainers.length; i++) { fragmentContainers[i] = (FragmentContainer) Fragment.instantiate(this, FragmentContainer.class.getName()); fragmentContainers[i].addmetaData(fragmentContainersmetaData[i]); } tabPageNavigationSelection(0); } void replaceFragmentBy(final Fragment fragment) { FragmentManager fragmentManager = getSupportFragmentManager(); FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); fragmentTransaction.replace(R.id.container, fragment); fragmentTransaction.commitAllowingStateLoss(); } // Method to switch between tabs void tabPageNavigationSelection (final int index) { if (currentTabIndex == index) { fragmentContainers[currentTabIndex].clearStackExceptRootFragment(); } else { currentTabIndex = index; replaceFragmentBy(fragmentContainers[currentTabIndex]); } }}FragmentContainer.xml
<frameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:background="@color/lightest_gray" android:id="@+id/nestedContainer" android:layout_width="match_parent" android:layout_height="match_parent"/>
FragmentContainer.java
public final class FragmentContainer extends Fragment { private final List<FragmentmetaData> fragmentmetaDataStack = new ArrayList<>(); @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { initialize(inflater, container, R.layout.fragment_container); for (FragmentmetaData metadata: fragmentmetaDataStack) { showNestedFragment(Fragment.instantiate(getActivity(), metaData.className, metaData.fragmentBundle), fragmentmetaDataStack.indexOf(metaData) > 0, true); } return getFragmentView(); } @Override public void onResume() { super.onResume(); if (getChildFragmentManager().getFragments() == null){ return; } int stackDepth = getChildFragmentManager().getFragments().size(); if (stackDepth > 0 && fragmentmetaDataStack.size() < stackDepth && getChildFragmentManager().getFragments().get(fragmentmetaDataStack.size() - 1) != null) { getChildFragmentManager().getFragments().get(fragmentmetaDataStack.size()-1).onResume(); } } public void showNestedFragment(final Fragment fragment, final boolean addToBackStack, final boolean isRestoring) { final FragmentTransaction fragmentTransaction = getChildFragmentManager().beginTransaction(); fragmentTransaction.replace(R.id.nestedContainer, fragment); if (addToBackStack) { fragmentTransaction.addToBackStack(null); } if (!isRestoring) { fragmentmetaDataStack.add(new FragmentmetaData(fragment.getClass().getName(), fragment.getArguments())); } fragmentTransaction.commitAllowingStateLoss(); } public void onBackPressed() { if (getChildFragmentManager().getBackStackEntryCount() > 0) { getChildFragmentManager().popBackStack(); fragmentmetaDataStack.remove(fragmentmetaDataStack.size() - 1); } else { getActivity().finish(); } } public void addmetaData(FragmentmetaData metaData) { fragmentmetaDataStack.add(metaData); } public void clearStackExceptRootFragment() { getChildFragmentManager().popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE); while (fragmentmetaDataStack.size() > 1) { fragmentmetaDataStack.remove(1); } }}希望这会对尝试复制instagram导航模型的人有所帮助:)



