| | |
| | | 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"; |
| | | private static final String TAG = "FragmentSwitchHelper"; |
| | | |
| | | public FragmentManager mFragmentManager; |
| | | public FragmentManager mFragmentManager; |
| | | |
| | | private Fragment[] mFragments; |
| | | private Fragment[] mFragments; |
| | | |
| | | private Fragment mCurrentFragment; |
| | | private Fragment mCurrentFragment; |
| | | |
| | | private int mContainerId; |
| | | 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 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); |
| | | } |
| | | 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; |
| | | } |
| | | 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(); |
| | | } |
| | | } |
| | | 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(); |
| | | } |
| | | } |
| | | } |