fragment应该是广大Android开发者都用到过的一个view,在此我整理了一个操作比较齐全的工具类,应该也是网上独一无二的,在此推荐我收集到的几篇fragment比较好的文章,[url="http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/0605/2996.html"]Square:从今天开始抛弃Fragment吧![/url](当然我没让你们放弃它哈),还有就是YoKey的Fragment全解析系列,献上他的库[url="https://github.com/YoKeyword/Fragmentation"]Fragmentation[/url]。

Fragment相关

addFragment : 新增fragment
addFragments : 新增多个fragment
removeFragment : 移除fragment
removeToFragment : 移除到指定fragment
removeFragments : 移除同级别fragment
removeAllFragments : 移除所有fragment
replaceFragment : 替换fragment
popFragment : 出栈fragment
popToFragment : 出栈到指定fragment
popFragments : 出栈同级别fragment
popAllFragments : 出栈所有fragment
popAddFragment : 先出栈后新增fragment
hideFragment : 隐藏fragment
hideFragments : 隐藏同级别fragment
showFragment : 显示fragment
hideShowFragment : 先隐藏后显示fragment
getLastAddFragment : 获取同级别最后加入的fragment
getLastAddFragmentInStack: 获取栈中同级别最后加入的fragment
getTopShowFragment : 获取顶层可见fragment
getTopShowFragmentInStack: 获取栈中顶层可见fragment
getFragments : 获取同级别fragment
getFragmentsInStack : 获取栈中同级别fragment
getAllFragments : 获取所有fragment
getAllFragmentsInStack : 获取栈中所有fragment
getPreFragment : 获取目标fragment的前一个fragment
findFragment : 查找fragment
dispatchBackPress : 处理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;

/**
*

* author: Blankj
* blog : http://blankj.com
* time : 2017/1/17
* desc : Fragment相关工具类
*

*/
public class FragmentUtils {

private FragmentUtils() {
throw new UnsupportedOperationException("u can't instantiate me...");
}

private static final int TYPE_ADD_FRAGMENT = 0x01;
private static final int TYPE_REMOVE_FRAGMENT = 0x01 << 1;
private static final int TYPE_REMOVE_TO_FRAGMENT = 0x01 << 2;
private static final int TYPE_REPLACE_FRAGMENT = 0x01 << 3;
private static final int TYPE_POP_ADD_FRAGMENT = 0x01 << 4;
private static final int TYPE_HIDE_FRAGMENT = 0x01 << 5;
private static final int TYPE_SHOW_FRAGMENT = 0x01 << 6;
private static final int TYPE_HIDE_SHOW_FRAGMENT = 0x01 << 7;

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 fragmentManager fragment管理器
* @param fragments fragments
* @param showIndex 要显示的fragment索引
* @param containerId 布局Id
* @return fragment
*/
public static Fragment addFragments(@NonNull FragmentManager fragmentManager,
@NonNull List fragments,
int showIndex,
int containerId) {
for (int i = fragments.size() - 1; i >= 0; --i) {
Fragment fragment = fragments.get(i);
if (fragment != null) {
putArgs(fragment, new Args(containerId, showIndex != i, false));
operateFragment(fragmentManager, null, fragment, TYPE_ADD_FRAGMENT);
}
}
return fragments.get(showIndex);
}

/**
* 移除fragment
*
* @param fragment fragment
*/
public static void removeFragment(@NonNull Fragment fragment) {
operateFragment(fragment.getFragmentManager(), null, fragment, TYPE_REMOVE_FRAGMENT);
}

/**
* 移除到指定fragment
*
* @param fragment fragment
* @param isIncludeSelf 是否包括Fragment类自己
*/
public static void removeToFragment(@NonNull Fragment fragment, boolean isIncludeSelf) {
operateFragment(fragment.getFragmentManager(), isIncludeSelf ? fragment : null, fragment, TYPE_REMOVE_TO_FRAGMENT);
}

/**
* 移除同级别fragment
*/
public static void removeFragments(@NonNull FragmentManager fragmentManager) {
List fragments = getFragments(fragmentManager);
if (fragments.isEmpty()) return;
for (int i = fragments.size() - 1; i >= 0; --i) {
Fragment fragment = fragments.get(i);
if (fragment != null) removeFragment(fragment);
}
}

/**
* 移除所有fragment
*/
public static void removeAllFragments(@NonNull FragmentManager fragmentManager) {
List fragments = getFragments(fragmentManager);
if (fragments.isEmpty()) return;
for (int i = fragments.size() - 1; i >= 0; --i) {
Fragment fragment = fragments.get(i);
if (fragment != null) {
removeAllFragments(fragment.getChildFragmentManager());
removeFragment(fragment);
}
}
}

/**
* 替换fragment
*
* @param srcFragment 源fragment
* @param destFragment 目标fragment
* @param isAddStack 是否入回退栈
* @return 目标fragment
*/
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}: 出栈成功
{@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}: 出栈成功
{@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管理器
*/
public static void popFragments(@NonNull FragmentManager fragmentManager) {
while (fragmentManager.getBackStackEntryCount() > 0) {
fragmentManager.popBackStackImmediate();
}
}

/**
* 出栈所有fragment
*
* @param fragmentManager fragment管理器
*/
public static void popAllFragments(@NonNull FragmentManager fragmentManager) {
List fragments = getFragments(fragmentManager);
if (fragments.isEmpty()) return;
for (int i = fragments.size() - 1; i >= 0; --i) {
Fragment fragment = fragments.get(i);
if (fragment != null) popAllFragments(fragment.getChildFragmentManager());
}
while (fragmentManager.getBackStackEntryCount() > 0) {
fragmentManager.popBackStackImmediate();
}
}

/**
* 先出栈后新增fragment
*
* @param fragmentManager fragment管理器
* @param containerId 布局Id
* @param fragment fragment
* @param isAddStack 是否入回退栈
* @return fragment
*/
public static Fragment popAddFragment(@NonNull FragmentManager fragmentManager,
int containerId,
@NonNull Fragment fragment,
boolean isAddStack,
SharedElement... sharedElement) {
putArgs(fragment, new Args(containerId, false, isAddStack));
return operateFragment(fragmentManager, null, fragment, TYPE_POP_ADD_FRAGMENT, sharedElement);
}

/**
* 先出栈后新增fragment
*
* @param fragmentManager fragment管理器
* @param containerId 布局Id
* @param fragment fragment
* @param isAddStack 是否入回退栈
* @return fragment
*/
public static Fragment popAddFragment(@NonNull FragmentManager fragmentManager,
int containerId,
@NonNull Fragment fragment,
boolean isAddStack) {
putArgs(fragment, new Args(containerId, false, isAddStack));
return operateFragment(fragmentManager, null, fragment, TYPE_POP_ADD_FRAGMENT);
}

/**
* 隐藏fragment
*
* @param fragment fragment
* @return 隐藏的Fragment
*/
public static Fragment hideFragment(@NonNull Fragment fragment) {
Args args = getArgs(fragment);
if (args != null) {
putArgs(fragment, new Args(args.id, true, args.isAddStack));
}
return operateFragment(fragment.getFragmentManager(), null, fragment, TYPE_HIDE_FRAGMENT);
}

/**
* 隐藏同级别fragment
*
* @param fragmentManager fragment管理器
*/
public static void hideFragments(@NonNull FragmentManager fragmentManager) {
List fragments = getFragments(fragmentManager);
if (fragments.isEmpty()) return;
for (int i = fragments.size() - 1; i >= 0; --i) {
Fragment fragment = fragments.get(i);
if (fragment != null) hideFragment(fragment);
}
}

/**
* 显示fragment
*
* @param fragment fragment
* @return show的Fragment
*/
public static Fragment showFragment(@NonNull Fragment fragment) {
Args args = getArgs(fragment);
if (args != null) {
putArgs(fragment, new Args(args.id, false, args.isAddStack));
}
return operateFragment(fragment.getFragmentManager(), null, fragment, TYPE_SHOW_FRAGMENT);
}

/**
* 先隐藏后显示fragment
*
* @param hideFragment 需要隐藏的Fragment
* @param showFragment 需要显示的Fragment
* @return 显示的Fragment
*/
public static Fragment hideShowFragment(@NonNull Fragment hideFragment,
@NonNull Fragment showFragment) {
Args args = getArgs(hideFragment);
if (args != null) {
putArgs(hideFragment, new Args(args.id, true, args.isAddStack));
}
args = getArgs(showFragment);
if (args != null) {
putArgs(showFragment, new Args(args.id, false, args.isAddStack));
}
return operateFragment(showFragment.getFragmentManager(), hideFragment, showFragment, TYPE_HIDE_SHOW_FRAGMENT);
}

/**
* 传参
*
* @param fragment fragment
* @param args 参数
*/
private static void putArgs(@NonNull Fragment fragment, Args args) {
Bundle bundle = fragment.getArguments();
if (bundle == null) {
bundle = new Bundle();
fragment.setArguments(bundle);
}
bundle.putInt(ARGS_ID, args.id);
bundle.putBoolean(ARGS_IS_HIDE, args.isHide);
bundle.putBoolean(ARGS_IS_ADD_STACK, args.isAddStack);
}

/**
* 获取参数
*
* @param fragment fragment
*/
private static Args getArgs(@NonNull Fragment fragment) {
Bundle bundle = fragment.getArguments();
if (bundle == null || bundle.getInt(ARGS_ID) == 0) return null;
return new Args(bundle.getInt(ARGS_ID), bundle.getBoolean(ARGS_IS_HIDE), bundle.getBoolean(ARGS_IS_ADD_STACK));
}

/**
* 操作fragment
*
* @param fragmentManager fragment管理器
* @param srcFragment 源fragment
* @param destFragment 目标fragment
* @param type 操作类型
* @param sharedElements 共享元素
* @return destFragment
*/
private static Fragment operateFragment(@NonNull FragmentManager fragmentManager,
Fragment srcFragment,
@NonNull Fragment destFragment,
int type,
SharedElement... sharedElements) {
if (srcFragment == destFragment) return null;
if (srcFragment != null && srcFragment.isRemoving()) {
LogUtils.e(srcFragment.getClass().getName() + " is isRemoving");
return null;
}
String name = destFragment.getClass().getName();
Bundle args = destFragment.getArguments();

FragmentTransaction ft = fragmentManager.beginTransaction();
if (sharedElements == null || sharedElements.length == 0) {
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
} else {
for (SharedElement element : sharedElements) {// 添加共享元素动画
ft.addSharedElement(element.sharedElement, element.name);
}
}
switch (type) {
case TYPE_ADD_FRAGMENT:
ft.add(args.getInt(ARGS_ID), destFragment, name);
if (args.getBoolean(ARGS_IS_HIDE)) ft.hide(destFragment);
if (args.getBoolean(ARGS_IS_ADD_STACK)) ft.addToBackStack(name);
break;
case TYPE_REMOVE_FRAGMENT:
ft.remove(destFragment);
break;
case TYPE_REMOVE_TO_FRAGMENT:
List fragments = getFragments(fragmentManager);
for (int i = fragments.size() - 1; i >= 0; --i) {
Fragment fragment = fragments.get(i);
if (fragment == destFragment) {
if (srcFragment != null) ft.remove(fragment);
break;
}
ft.remove(fragment);
}
break;
case TYPE_REPLACE_FRAGMENT:
ft.replace(args.getInt(ARGS_ID), destFragment, name);
if (args.getBoolean(ARGS_IS_ADD_STACK)) ft.addToBackStack(name);
break;
case TYPE_POP_ADD_FRAGMENT:
popFragment(fragmentManager);
ft.add(args.getInt(ARGS_ID), destFragment, name);
if (args.getBoolean(ARGS_IS_ADD_STACK)) ft.addToBackStack(name);
break;
case TYPE_HIDE_FRAGMENT:
ft.hide(destFragment);
break;
case TYPE_SHOW_FRAGMENT:
ft.show(destFragment);
break;
case TYPE_HIDE_SHOW_FRAGMENT:
ft.hide(srcFragment).show(destFragment);
break;
}
ft.commitAllowingStateLoss();
return destFragment;
}

/**
* 获取同级别最后加入的fragment
*
* @param fragmentManager fragment管理器
* @return 最后加入的fragment
*/
public static Fragment getLastAddFragment(@NonNull FragmentManager fragmentManager) {
return getLastAddFragmentIsInStack(fragmentManager, false);
}

/**
* 获取栈中同级别最后加入的fragment
*
* @param fragmentManager fragment管理器
* @return 最后加入的fragment
*/
public static Fragment getLastAddFragmentInStack(@NonNull FragmentManager fragmentManager) {
return getLastAddFragmentIsInStack(fragmentManager, true);
}

/**
* 根据栈参数获取同级别最后加入的fragment
*
* @param fragmentManager fragment管理器
* @param isInStack 是否是栈中的
* @return 栈中最后加入的fragment
*/
private static Fragment getLastAddFragmentIsInStack(@NonNull FragmentManager fragmentManager,
boolean isInStack) {
List fragments = getFragments(fragmentManager);
if (fragments.isEmpty()) return null;
for (int i = fragments.size() - 1; i >= 0; --i) {
Fragment fragment = fragments.get(i);
if (fragment != null) {
if (isInStack) {
if (fragment.getArguments().getBoolean(ARGS_IS_ADD_STACK)) {
return fragment;
}
} else {
return fragment;
}
}
}
return null;
}

/**
* 获取顶层可见fragment
*
* @param fragmentManager fragment管理器
* @return 顶层可见fragment
*/
public static Fragment getTopShowFragment(@NonNull FragmentManager fragmentManager) {
return getTopShowFragmentIsInStack(fragmentManager, null, false);
}

/**
* 获取栈中顶层可见fragment
*
* @param fragmentManager fragment管理器
* @return 栈中顶层可见fragment
*/
public static Fragment getTopShowFragmentInStack(@NonNull FragmentManager fragmentManager) {
return getTopShowFragmentIsInStack(fragmentManager, null, true);
}

/**
* 根据栈参数获取顶层可见fragment
*
* @param fragmentManager fragment管理器
* @param parentFragment 父fragment
* @param isInStack 是否是栈中的
* @return 栈中顶层可见fragment
*/
private static Fragment getTopShowFragmentIsInStack(@NonNull FragmentManager fragmentManager,
Fragment parentFragment,
boolean isInStack) {
List fragments = getFragments(fragmentManager);
if (fragments.isEmpty()) return parentFragment;
for (int i = fragments.size() - 1; i >= 0; --i) {
Fragment fragment = fragments.get(i);
if (fragment != null && fragment.isResumed() && fragment.isVisible() && fragment.getUserVisibleHint()) {
if (isInStack) {
if (fragment.getArguments().getBoolean(ARGS_IS_ADD_STACK)) {
return getTopShowFragmentIsInStack(fragment.getChildFragmentManager(), fragment, true);
}
} else {
return getTopShowFragmentIsInStack(fragment.getChildFragmentManager(), fragment, false);
}
}
}
return parentFragment;
}

/**
* 获取同级别fragment
*
* @param fragmentManager fragment管理器
* @return 同级别的fragments
*/
public static List getFragments(@NonNull FragmentManager fragmentManager) {
return getFragmentsIsInStack(fragmentManager, false);
}

/**
* 获取栈中同级别fragment
*
* @param fragmentManager fragment管理器
* @return 栈中同级别fragment
*/
public static List getFragmentsInStack(@NonNull FragmentManager fragmentManager) {
return getFragmentsIsInStack(fragmentManager, true);
}

/**
* 根据栈参数获取同级别fragment
*
* @param fragmentManager fragment管理器
* @param isInStack 是否是栈中的
* @return 栈中同级别fragment
*/
private static List getFragmentsIsInStack(@NonNull FragmentManager fragmentManager, boolean isInStack) {
List fragments = fragmentManager.getFragments();
if (fragments == null || fragments.isEmpty()) return Collections.emptyList();
List result = new ArrayList<>();
for (int i = fragments.size() - 1; i >= 0; --i) {
Fragment fragment = fragments.get(i);
if (fragment != null) {
if (isInStack) {
if (fragment.getArguments().getBoolean(ARGS_IS_ADD_STACK)) {
result.add(fragment);
}
} else {
result.add(fragment);
}
}
}
return result;
}

/**
* 获取所有fragment
*
* @param fragmentManager fragment管理器
* @return 所有fragment
*/
public static List getAllFragments(@NonNull FragmentManager fragmentManager) {
return getAllFragmentsIsInStack(fragmentManager, new ArrayList(), false);
}

/**
* 获取栈中所有fragment
*
* @param fragmentManager fragment管理器
* @return 所有fragment
*/
public static List getAllFragmentsInStack(@NonNull FragmentManager fragmentManager) {
return getAllFragmentsIsInStack(fragmentManager, new ArrayList(), true);
}

/**
* 根据栈参数获取所有fragment
*

需之前对fragment的操作都借助该工具类


*
* @param fragmentManager fragment管理器
* @param result 结果
* @param isInStack 是否是栈中的
* @return 栈中所有fragment
*/
private static List getAllFragmentsIsInStack(@NonNull FragmentManager fragmentManager,
List result,
boolean isInStack) {
List fragments = fragmentManager.getFragments();
if (fragments == null || fragments.isEmpty()) return Collections.emptyList();
for (int i = fragments.size() - 1; i >= 0; --i) {
Fragment fragment = fragments.get(i);
if (fragment != null) {
if (isInStack) {
if (fragment.getArguments().getBoolean(ARGS_IS_ADD_STACK)) {
result.add(new FragmentNode(fragment, getAllFragmentsIsInStack(fragment.getChildFragmentManager(), new ArrayList(), true)));
}
} else {
result.add(new FragmentNode(fragment, getAllFragmentsIsInStack(fragment.getChildFragmentManager(), new ArrayList(), false)));
}
}
}
return result;
}

/**
* 获取目标fragment的前一个fragment
*
* @param destFragment 目标fragment
* @return 目标fragment的前一个fragment
*/
public static Fragment getPreFragment(@NonNull Fragment destFragment) {
FragmentManager fragmentManager = destFragment.getFragmentManager();
if (fragmentManager == null) return null;
List fragments = getFragments(fragmentManager);
boolean flag = false;
for (int i = fragments.size() - 1; i >= 0; --i) {
Fragment fragment = fragments.get(i);
if (flag && fragment != null) {
return fragment;
}
if (fragment == destFragment) {
flag = true;
}
}
return null;
}

/**
* 查找fragment
*
* @param fragmentManager fragment管理器
* @param fragmentClass fragment类
* @return 查找到的fragment
*/
public static Fragment findFragment(@NonNull FragmentManager fragmentManager, Class<? extends Fragment> fragmentClass) {
List fragments = getFragments(fragmentManager);
if (fragments.isEmpty()) return null;
return fragmentManager.findFragmentByTag(fragmentClass.getName());
}

/**
* 处理fragment回退键
*

如果fragment实现了OnBackClickListener接口,返回{@code true}: 表示已消费回退键事件,反之则没消费


*

具体示例见FragmentActivity


*
* @param fragment fragment
* @return 是否消费回退事件
*/

public static boolean dispatchBackPress(@NonNull Fragment fragment) {
return dispatchBackPress(fragment.getFragmentManager());
}

/**
* 处理fragment回退键
*

如果fragment实现了OnBackClickListener接口,返回{@code true}: 表示已消费回退键事件,反之则没消费


*

具体示例见FragmentActivity


*
* @param fragmentManager fragment管理器
* @return 是否消费回退事件
*/
public static boolean dispatchBackPress(@NonNull FragmentManager fragmentManager) {
List fragments = fragmentManager.getFragments();
if (fragments == null || fragments.isEmpty()) return false;
for (int i = fragments.size() - 1; i >= 0; --i) {
Fragment fragment = fragments.get(i);
if (fragment != null
&& fragment.isResumed()
&& fragment.isVisible()
&& fragment.getUserVisibleHint()
&& fragment instanceof OnBackClickListener
&& ((OnBackClickListener) fragment).onBackClick()) {
return true;
}
}
return false;
}

/**
* 设置背景色
*
* @param fragment fragment
* @param color 背景色
*/
public static void setBackgroundColor(@NonNull Fragment fragment, @ColorInt int color) {
View view = fragment.getView();
if (view != null) {
view.setBackgroundColor(color);
}
}

/**
* 设置背景资源
*
* @param fragment fragment
* @param resId 资源Id
*/
public static void setBackgroundResource(@NonNull Fragment fragment, @DrawableRes int resId) {
View view = fragment.getView();
if (view != null) {
view.setBackgroundResource(resId);
}
}

/**
* 设置背景
*
* @param fragment fragment
* @param background 背景
*/
public static void setBackground(@NonNull Fragment fragment, Drawable background) {
View view = fragment.getView();
if (view != null) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
view.setBackground(background);
} else {
view.setBackgroundDrawable(background);
}
}
}

static class Args {
int id;
boolean isHide;
boolean isAddStack;

Args(int id, boolean isHide, boolean isAddStack) {
this.id = id;
this.isHide = isHide;
this.isAddStack = isAddStack;
}
}

public static class SharedElement {
View sharedElement;
String name;

public SharedElement(View sharedElement, String name) {
this.sharedElement = sharedElement;
this.name = name;
}
}

static class FragmentNode {
Fragment fragment;
List next;

public FragmentNode(Fragment fragment, List next) {
this.fragment = fragment;
this.next = next;
}

@Override
public String toString() {
return fragment.getClass().getSimpleName() + "->" + ((next == null || next.isEmpty()) ? "no child" : next.toString());
}
}

public interface OnBackClickListener {
boolean onBackClick();
}
}

更多相关文章

  1. Android实现QQ图片说说照片选择效果
  2. Android(安卓)开发(二)登陆界面
  3. Android(安卓)目录
  4. Android开发之ListView详解 以及简单的listView优化
  5. Android(安卓)FFmpeg系列——6 Java 获取播放进度
  6. Android(安卓)Bitmap和Canvas学习笔记
  7. Android——Bitmap和Canvas
  8. Android(安卓)MediaProjection截屏与录屏(surfaceview截图)(一)
  9. ScrollView嵌套RecyclerView出现item显示不全的问题

随机推荐

  1. 如何使用android手机拍照
  2. 使用Android(安卓)Studio可能会遇到的问
  3. Android官方文档阅读之旅——Introductio
  4. 举例说明Android中AnalogClock的使用
  5. image button on android
  6. android 判断是否第一次进入欢迎页
  7. MySQL数据库开发的36条原则(小结)
  8. MySql 知识点之事务、索引、锁原理与用法
  9. MySQL 查询速度慢与性能差的原因与解决方
  10. mysql查询慢的原因和解决方案