Fragment管理工具类

  • Fragment相关→FragmentUtils.javaDemo
    addFragment              : 新增fragment
    removeFragment           : 移除fragment
    replaceFragment          : 替换fragment
    popFragment              : 出栈fragment
    popToFragment            : 出栈到指定fragment popAddFragment : 先出栈后新增fragment hideFragment : 隐藏fragment showFragment : 显示fragment hideShowFragment : 先隐藏后显示fragment getLastAddFragment : 获取最后加入的fragment getLastAddFragmentInStack: 获取栈中最后加入的fragment getTopShowFragment : 获取顶层可见fragment getTopShowFragmentInStack: 获取栈中顶层可见fragment findFragment : 查找fragment getPreFragment : 获取目标fragment的前一个fragment getFragments : 获取同级别的fragment getAllFragments : 获取所有fragment getAllFragmentsInStack : 获取栈中所有fragment setBackgroundColor : 设置背景色 setBackgroundResource : 设置背景资源 setBackground : 设置背景

具体路线

import android.graphics.drawable.Drawable;
import android.os.Build;
import android.os.Bundle;
import android.support.annotation.ColorInt;
import android.support.annotation.DrawableRes; import android.support.annotation.NonNull; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentTransaction; import android.view.View; import java.util.ArrayList; import java.util.Collections; import java.util.List; /** * <pre> * author: Blankj * blog : http://blankj.com * time : 2017/1/17 * desc : Fragment相关工具类 * </pre> */ public class FragmentUtils { private FragmentUtils() { throw new UnsupportedOperationException("u can't instantiate me..."); } private static final int TYPE_ADD_FRAGMENT = 0x01 << 0; private static final int TYPE_REMOVE_FRAGMENT = 0x01 << 1; private static final int TYPE_REPLACE_FRAGMENT = 0x01 << 2; private static final int TYPE_HIDE_FRAGMENT = 0x01 << 3; private static final int TYPE_SHOW_FRAGMENT = 0x01 << 4; private static final int TYPE_HIDE_SHOW_FRAGMENT = 0x01 << 5; private static final int TYPE_POP_ADD_FRAGMENT = 0x01 << 6; private static final String ARGS_ID = "args_id"; private static final String ARGS_IS_HIDE = "args_is_hide"; private static final String ARGS_IS_ADD_STACK = "args_is_add_stack"; /** * 新增fragment * * @param fragmentManager fragment管理器 * @param containerId 布局Id * @param fragment fragment * @return fragment */ public static Fragment addFragment(@NonNull FragmentManager fragmentManager, @NonNull Fragment fragment, int containerId) { return addFragment(fragmentManager, fragment, containerId, false); } /** * 新增fragment * * @param fragmentManager fragment管理器 * @param containerId 布局Id * @param fragment fragment * @param isHide 是否显示 * @return fragment */ public static Fragment addFragment(@NonNull FragmentManager fragmentManager, @NonNull Fragment fragment, int containerId, boolean isHide) { return addFragment(fragmentManager, fragment, containerId, isHide, false); } /** * 新增fragment * * @param fragmentManager fragment管理器 * @param containerId 布局Id * @param fragment fragment * @param isHide 是否显示 * @param isAddStack 是否入回退栈 * @return fragment */ public static Fragment addFragment(@NonNull FragmentManager fragmentManager, @NonNull Fragment fragment, int containerId, boolean isHide, boolean isAddStack) { putArgs(fragment, new Args(containerId, isHide, isAddStack)); return operateFragment(fragmentManager, null, fragment, TYPE_ADD_FRAGMENT); } /** * 新增fragment * * @param fragmentManager fragment管理器 * @param containerId 布局Id * @param fragment fragment * @param isAddStack 是否入回退栈 * @param sharedElement 共享元素 * @return fragment */ public static Fragment addFragment(@NonNull FragmentManager fragmentManager, @NonNull Fragment fragment, int containerId, boolean isAddStack, SharedElement... sharedElement) { putArgs(fragment, new Args(containerId, false, isAddStack)); return operateFragment(fragmentManager, null, fragment, TYPE_ADD_FRAGMENT, sharedElement); } /** * 移除fragment * * @param fragment fragment * @return fragment */ public static Fragment removeFragment(@NonNull Fragment fragment) { return operateFragment(fragment.getFragmentManager(), null, fragment, TYPE_REMOVE_FRAGMENT); } /** * 替换fragment * * @param srcFragment 源fragment * @param destFragment 目标fragment * @param isAddStack 是否入回退栈 * @return {@code null} 失败 */ public static Fragment replaceFragment(@NonNull Fragment srcFragment, @NonNull Fragment destFragment, boolean isAddStack) { if (srcFragment.getArguments() == null) return null; int containerId = srcFragment.getArguments().getInt(ARGS_ID); if (containerId == 0) return null; return replaceFragment(srcFragment.getFragmentManager(), containerId, destFragment, isAddStack); } /** * 替换fragment * * @param fragmentManager fragment管理器 * @param containerId 布局Id * @param fragment fragment * @param isAddStack 是否入回退栈 * @return fragment */ public static Fragment replaceFragment(@NonNull FragmentManager fragmentManager, int containerId, @NonNull Fragment fragment, boolean isAddStack) { putArgs(fragment, new Args(containerId, false, isAddStack)); return operateFragment(fragmentManager, null, fragment, TYPE_REPLACE_FRAGMENT); } /** * 出栈fragment * * @param fragmentManager fragment管理器 * @return {@code true}: 出栈成功<br>{@code false}: 出栈失败 */ public static boolean popFragment(@NonNull FragmentManager fragmentManager) { return fragmentManager.popBackStackImmediate(); } /** * 出栈到指定fragment * * @param fragmentManager fragment管理器 * @param fragmentClass Fragment类 * @param isIncludeSelf 是否包括Fragment类自己 * @return {@code true}: 出栈成功<br>{@code false}: 出栈失败 */ public static boolean popToFragment(@NonNull FragmentManager fragmentManager, Class<? extends Fragment> fragmentClass, boolean isIncludeSelf) { return fragmentManager.popBackStackImmediate(fragmentClass.getName(), isIncludeSelf ? FragmentManager.POP_BACK_STACK_INCLUSIVE : 0); } /** * 先出栈后新增fragment * * @param fragmentManager fragment管理器 * @param containerId 布局Id * @param fragment fragment * @param isAddStack 是否入回退栈 * @return fragment */ 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值