fragment重叠问题解决 调用另一个fragment原来的fragment还显示在新fragment下面

本文介绍了一个关于Android应用中Fragment重叠问题的解决方案,提供了一个ActivityUtil工具类,用于隐藏和显示Fragment,避免显示多个重叠页面。通过实例代码展示了如何清除原有Fragment、隐藏Fragment和显示指定Fragment的方法。
摘要由CSDN通过智能技术生成
  1. 重叠是因为fragment保持在FragmentManager管理器中 在activity 是显示的 ,就相当与一下子显示多个重叠的页面

  2. 解决办法 在调用别的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();
    }

}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值