public static Fragment switchPagesByHide(Map<Integer, PairX<String, SoftReference<Fragment>>> map, FragmentManager fragmentManager, int fragment_container_id, int key) {
Fragment fragment; ArrayList<Fragment> needHideFragments = new ArrayList<>(); for (Integer currentKey : map.keySet()) { if (currentKey == key) { continue; } PairX<String, SoftReference<Fragment>> pair = map.get(currentKey); fragment = pair.second.get(); if (fragment == null) { fragment = fragmentManager.findFragmentByTag(getFragmentTagName(pair.first)); if (fragment != null && fragment.isAdded()) { needHideFragments.add(fragment); if (BuildConfig.DEBUG && AppContext.DEBUG_) { Log.w(TAG, "from tag fragment :" + fragment.getClass().getSimpleName()); } } continue; } else if (fragment.isAdded()) { needHideFragments.add(fragment); } else { fragment = fragmentManager.findFragmentByTag(getFragmentTagName(fragment.getClass())); if (fragment != null && fragment.isAdded()) { needHideFragments.add(fragment); if (BuildConfig.DEBUG && AppContext.DEBUG_) { Log.w(TAG, " and instance not add,from tag fragment :" + fragment.getClass().getSimpleName()); } } } } PairX<String, SoftReference<Fragment>> pair = map.get(key);
Fragment currentFragment = pair.second.get(); Fragment tagCurrentFragment = fragmentManager.findFragmentByTag(getFragmentTagName(currentFragment.getClass().getName())); if (currentFragment == null) { if (tagCurrentFragment != null) { currentFragment = tagCurrentFragment; } else { try { currentFragment = (Fragment) Class.forName(pair.first).newInstance(); pair.second = new SoftReference<>(currentFragment); } catch (Throwable e) { e.printStackTrace(); } } } else if (tagCurrentFragment != null && tagCurrentFragment.isAdded()) {//当前如果tag里面有还是需要隐藏它. needHideFragments.add(tagCurrentFragment); }
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); for (Fragment fragment_ : needHideFragments) { //if (!fragment_.isHidden()) { if (BuildConfig.DEBUG && AppContext.DEBUG_) { if (fragment_.isHidden()) { Log.w(TAG, "REPEAT_HIDE_" + fragment_.getClass().getSimpleName()); } else {