package com.lcjian.library.util;
|
|
import androidx.fragment.app.Fragment;
|
import androidx.fragment.app.FragmentManager;
|
import androidx.fragment.app.FragmentTransaction;
|
import android.util.Log;
|
|
public class FragmentSwitchHelper {
|
|
private static final String TAG = "FragmentSwitchHelper";
|
|
public FragmentManager mFragmentManager;
|
|
private Fragment[] mFragments;
|
|
private Fragment mCurrentFragment;
|
|
private int mContainerId;
|
|
public Fragment getFragmentByName(String name) {
|
if (mFragments == null || mFragments.length == 0)
|
return null;
|
for (Fragment m : mFragments)
|
if (name.contains(m.getClass().getName())) {
|
return m;
|
}
|
return null;
|
}
|
|
public static FragmentSwitchHelper create(int containerId,
|
FragmentManager fragmentManager, Fragment... fragments) {
|
return new FragmentSwitchHelper(containerId, fragmentManager, fragments);
|
}
|
|
private FragmentSwitchHelper(int containerId,
|
FragmentManager fragmentManager, Fragment... fragments) {
|
this.mContainerId = containerId;
|
this.mFragments = fragments;
|
this.mFragmentManager = fragmentManager;
|
}
|
|
public void changeFragment(Class<? extends Fragment> replaceFragmentClass) {
|
if (!mFragmentManager.isDestroyed()) {
|
Fragment replaceFragment = mFragmentManager
|
.findFragmentByTag(replaceFragmentClass.getName());
|
if (mCurrentFragment == replaceFragment && mCurrentFragment != null) {
|
Log.d(TAG, "changeFragment noChange ");
|
return;
|
}
|
FragmentTransaction fragmentTransaction = mFragmentManager
|
.beginTransaction();
|
if (mCurrentFragment != null) {
|
fragmentTransaction.detach(mCurrentFragment);
|
Log.d(TAG, "changeFragment detach "
|
+ mCurrentFragment.getClass().getName());
|
}
|
if (replaceFragment == null) {
|
for (Fragment item : mFragments) {
|
if (item.getClass().getName()
|
.equals(replaceFragmentClass.getName())) {
|
replaceFragment = item;
|
break;
|
}
|
}
|
fragmentTransaction.add(mContainerId, replaceFragment,
|
replaceFragmentClass.getName());
|
mCurrentFragment = replaceFragment;
|
Log.d(TAG,
|
"changeFragment add " + replaceFragmentClass.getName());
|
} else {
|
fragmentTransaction.attach(replaceFragment);
|
mCurrentFragment = replaceFragment;
|
Log.d(TAG,
|
"changeFragment attach "
|
+ replaceFragmentClass.getName());
|
}
|
fragmentTransaction.commitAllowingStateLoss();
|
}
|
}
|
}
|