-
重叠是因为fragment保持在FragmentManager管理器中 在activity 是显示的 ,就相当与一下子显示多个重叠的页面
-
解决办法 在调用别的fragment前把前面的fragment隐藏就行
这是我做的fragment的隐藏工具
package com.crystallightghot.frscommunityclient.view.util;
import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentTransaction;
import java.util.List;
/**
* @author crystallightghost
* @date 2022/1/6
* @Version: 1.0
* description:
*/
/*
* @Description TODO
* @Date 2022/1/6 11:20
* @Created by CrystalLightGhost
*/
public class ActivityUtile {
/**
* 清楚原来fragment里现有的fragment
*/
public static void removeAllFragments(AppCompatActivity activity, List<Fragment> fragmentsNeededHidden) {
if (null == fragmentsNeededHidden) {
return;
}
FragmentManager fragmentManager = activity.getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
for (int i = 0; i < fragmentsNeededHidden.size(); i++) {
fragmentTransaction.remove(fragmentsNeededHidden.get(i));
}
fragmentTransaction.commit();
}
/**
* 隐藏所有已加入的fragment
*/
public static void hideFragment(AppCompatActivity activity, Fragment fragment) {
if (null == fragment) { //没有就不需要清理
return;
}
FragmentManager fragmentManager = activity.getSupportFragmentManager();
final FragmentTransaction transaction = fragmentManager.beginTransaction();
transaction.hide(fragment);
transaction.commitAllowingStateLoss();
}
/**
* 显示fragment
*
* @param
*/
public static void showFragment(Fragment showedFragment, AppCompatActivity activity, List<Fragment> fragmentsNeededHidden, int viewId) {
// 隐藏所有fragment
if (null != fragmentsNeededHidden) {
setAllFragmentsHidden(activity, fragmentsNeededHidden);
}
FragmentManager fragmentManager = activity.getSupportFragmentManager();
final FragmentTransaction transaction = fragmentManager.beginTransaction();
// 已经添加fragment 显示
if (showedFragment.isAdded()) {
transaction.show(showedFragment);
} else { // 新加入的fragment 添加到回退栈
transaction.add(viewId, showedFragment);
transaction.addToBackStack(null);
}
transaction.commit();
}
/**
* 隐藏所有已加入的fragment
*/
public static void showFragment(AppCompatActivity activity, Fragment fragment) {
if (null == fragment) { //没有就不需要清理
return;
}
FragmentManager fragmentManager = activity.getSupportFragmentManager();
final FragmentTransaction transaction = fragmentManager.beginTransaction();
transaction.show(fragment);
transaction.commitAllowingStateLoss();
}
/**
* 隐藏所有已加入的fragment
*/
public static void setAllFragmentsHidden(AppCompatActivity activity, List<Fragment> yourFragments) {
if (null == yourFragments) { //没有就不需要清理
return;
}
FragmentManager fragmentManager = activity.getSupportFragmentManager();
final FragmentTransaction transaction = fragmentManager.beginTransaction();
for (int i = 0; i < yourFragments.size(); i++) {
Fragment fragment = yourFragments.get(i);
transaction.hide(fragment);
}
transaction.commitAllowingStateLoss();
}
}