package com.lcjian.library.util;
|
|
import android.util.Log;
|
|
import java.util.HashMap;
|
import java.util.Map;
|
|
import androidx.fragment.app.Fragment;
|
import androidx.fragment.app.FragmentManager;
|
import androidx.fragment.app.FragmentTransaction;
|
|
public class FragmentSwitchHelperV2 {
|
|
private static final String TAG = "FragmentSwitchHelperV2";
|
|
public FragmentManager mFragmentManager;
|
|
private Map<String, Fragment> mFragments;
|
|
private Fragment mCurrentFragment;
|
|
private int mContainerId;
|
|
|
public Fragment getFragmentByTag(String tag) {
|
if (mFragments == null || mFragments.isEmpty())
|
return null;
|
return mFragments.get(tag);
|
}
|
|
public static FragmentSwitchHelperV2 create(int containerId,
|
FragmentManager fragmentManager, Map<String, Fragment> mFragments) {
|
return new FragmentSwitchHelperV2(containerId, fragmentManager, mFragments);
|
}
|
|
private FragmentSwitchHelperV2(int containerId,
|
FragmentManager fragmentManager, Map<String, Fragment> mFragments) {
|
this.mContainerId = containerId;
|
this.mFragments = mFragments;
|
this.mFragmentManager = fragmentManager;
|
}
|
|
public void addFragment(String tag, Fragment fragment) {
|
if (mFragments == null) {
|
mFragments = new HashMap<>();
|
}
|
mFragments.put(tag, fragment);
|
}
|
|
public void changeFragment(String tag) {
|
|
if (mFragments.get(tag) == null) {
|
return;
|
}
|
|
if (!mFragmentManager.isDestroyed()) {
|
Fragment replaceFragment = mFragmentManager
|
.findFragmentByTag(tag);
|
if (mCurrentFragment == replaceFragment && mCurrentFragment != null) {
|
Log.d(TAG, "changeFragment noChange ");
|
return;
|
}
|
FragmentTransaction fragmentTransaction = mFragmentManager
|
.beginTransaction();
|
if (mCurrentFragment != null) {
|
// fragmentTransaction.detach(mCurrentFragment);
|
fragmentTransaction.hide(mCurrentFragment);
|
|
Log.d(TAG, "changeFragment detach " + mCurrentFragment.getTag());
|
}
|
if (replaceFragment == null) {
|
replaceFragment = mFragments.get(tag);
|
fragmentTransaction.add(mContainerId, replaceFragment,
|
tag);
|
Log.d(TAG,
|
"changeFragment add " + tag);
|
} else {
|
// fragmentTransaction.attach(replaceFragment);
|
fragmentTransaction.show(replaceFragment);
|
|
Log.d(TAG,
|
"changeFragment attach "
|
+ tag);
|
}
|
|
fragmentTransaction.commitAllowingStateLoss();
|
mCurrentFragment = replaceFragment;
|
}
|
|
}
|
}
|