- 浏览: 5825324 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (890)
- WindowsPhone (0)
- android (88)
- android快速迭代 (17)
- android基础 (34)
- android进阶 (172)
- android高级 (0)
- android拾遗 (85)
- android动画&效果 (68)
- Material Design (13)
- LUA (5)
- j2me (32)
- jQuery (39)
- spring (26)
- hibernate (20)
- struts (26)
- tomcat (9)
- javascript+css+html (62)
- jsp+servlet+javabean (14)
- java (37)
- velocity+FCKeditor (13)
- linux+批处理 (9)
- mysql (19)
- MyEclipse (9)
- ajax (7)
- wap (8)
- j2ee+apache (24)
- 其他 (13)
- phonegap (35)
最新评论
-
Memories_NC:
本地lua脚本终于执行成功了,虽然不是通过redis
java中调用lua脚本语言1 -
ZHOU452840622:
大神://处理返回的接收状态 这个好像没有监听到 遇 ...
android 发送短信的两种方式 -
PXY:
拦截部分地址,怎么写的for(int i=0;i<lis ...
判断是否登录的拦截器SessionFilter -
maotou1988:
Android控件之带清空按钮(功能)的AutoComplet ...
自定义AutoCompleteTextView -
yangmaolinpl:
希望有表例子更好。。。,不过也看明白了。
浅谈onInterceptTouchEvent、onTouchEvent与onTouch
fragment应该是广大Android开发者都用到过的一个view,在此我整理了一个操作比较齐全的工具类,应该也是网上独一无二的,在此推荐我收集到的几篇fragment比较好的文章,Square:从今天开始抛弃Fragment吧!(当然我没让你们放弃它哈),还有就是YoKey的Fragment全解析系列,献上他的库Fragmentation。
Fragment相关
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; /** * <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; 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<Fragment> 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<Fragment> 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<Fragment> 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}: 出栈成功<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管理器 */ 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<Fragment> 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<Fragment> 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<Fragment> 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<Fragment> 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<Fragment> 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<Fragment> getFragments(@NonNull FragmentManager fragmentManager) { return getFragmentsIsInStack(fragmentManager, false); } /** * 获取栈中同级别fragment * * @param fragmentManager fragment管理器 * @return 栈中同级别fragment */ public static List<Fragment> getFragmentsInStack(@NonNull FragmentManager fragmentManager) { return getFragmentsIsInStack(fragmentManager, true); } /** * 根据栈参数获取同级别fragment * * @param fragmentManager fragment管理器 * @param isInStack 是否是栈中的 * @return 栈中同级别fragment */ private static List<Fragment> getFragmentsIsInStack(@NonNull FragmentManager fragmentManager, boolean isInStack) { List<Fragment> fragments = fragmentManager.getFragments(); if (fragments == null || fragments.isEmpty()) return Collections.emptyList(); List<Fragment> 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<FragmentNode> getAllFragments(@NonNull FragmentManager fragmentManager) { return getAllFragmentsIsInStack(fragmentManager, new ArrayList<FragmentNode>(), false); } /** * 获取栈中所有fragment * * @param fragmentManager fragment管理器 * @return 所有fragment */ public static List<FragmentNode> getAllFragmentsInStack(@NonNull FragmentManager fragmentManager) { return getAllFragmentsIsInStack(fragmentManager, new ArrayList<FragmentNode>(), true); } /** * 根据栈参数获取所有fragment * <p>需之前对fragment的操作都借助该工具类</p> * * @param fragmentManager fragment管理器 * @param result 结果 * @param isInStack 是否是栈中的 * @return 栈中所有fragment */ private static List<FragmentNode> getAllFragmentsIsInStack(@NonNull FragmentManager fragmentManager, List<FragmentNode> result, boolean isInStack) { List<Fragment> 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<FragmentNode>(), true))); } } else { result.add(new FragmentNode(fragment, getAllFragmentsIsInStack(fragment.getChildFragmentManager(), new ArrayList<FragmentNode>(), 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<Fragment> 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<Fragment> fragments = getFragments(fragmentManager); if (fragments.isEmpty()) return null; return fragmentManager.findFragmentByTag(fragmentClass.getName()); } /** * 处理fragment回退键 * <p>如果fragment实现了OnBackClickListener接口,返回{@code true}: 表示已消费回退键事件,反之则没消费</p> * <p>具体示例见FragmentActivity</p> * * @param fragment fragment * @return 是否消费回退事件 */ public static boolean dispatchBackPress(@NonNull Fragment fragment) { return dispatchBackPress(fragment.getFragmentManager()); } /** * 处理fragment回退键 * <p>如果fragment实现了OnBackClickListener接口,返回{@code true}: 表示已消费回退键事件,反之则没消费</p> * <p>具体示例见FragmentActivity</p> * * @param fragmentManager fragment管理器 * @return 是否消费回退事件 */ public static boolean dispatchBackPress(@NonNull FragmentManager fragmentManager) { List<Fragment> 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<FragmentNode> next; public FragmentNode(Fragment fragment, List<FragmentNode> 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(); } }
发表评论
-
左中右结构的行布局
2016-12-19 21:35 1185最近项目要开发一个新版本,发现项目中许多布局大致都相同改动不大 ... -
RecyclerView:带header&footer&加载更多
2015-09-09 16:24 2969接上一篇 由简到繁,循序渐进 实现了: 0,点击&长按 ... -
RecyclerView:带header和footer的grid
2015-09-09 13:47 3047知道原理后,为RecyclerView实现同时带header和 ... -
RecyclerView:带header的grid
2015-09-09 13:01 2432RecyclerView是一个高度可定制性的View 本文将使 ... -
iconify使用文本替换icon测试
2015-08-28 17:12 1693源项目地址 https://github.com/JoanZa ... -
快速上传头像到服务端工具类FaceUtil
2015-07-12 14:22 3081快速迭代用 import java.io.DataOut ... -
HorizontalScrollView+RadioGroup+ViewPager+FragmentPagerAdapter基本结构
2015-07-12 13:56 3297快速迭代用 import java.util.Arr ... -
LoadMoreListView+SwipeRefreshLayout(分页下拉)基本结构
2015-07-12 13:07 4157一切为了快速迭代 import java.util. ... -
RadioButton+ViewPager+FragmentPagerAdapter快速搭建页面结构
2015-07-12 11:08 2565一切为了快速开发 开发类似界面 import and ... -
为ViewPager设置CirclePageIndicator(小圆点)
2015-07-03 16:54 15335一切为了快速迭代! import android.con ... -
简单实现可以多选的ProductListDialog<T>
2015-06-25 22:33 1259只是一个范例,是为了代码快速迭代而写的 使用了listView ... -
基于上一篇写的SimplePairListPopupWindow<F,S>
2015-06-19 11:15 1538这次使用Pair<F,S>实现一个简单的Simpl ... -
基于上一篇实现的SimpleListPopupWindow<T>
2015-06-19 11:11 1520这次是个简单的PopupWindow,快速迭代用。 imp ... -
实现一个快速简单的SimpleListDialog<T>
2015-06-19 10:59 1749我写这样的文章都是为了快速迭代,所以都写的比较简单,谅解 此 ... -
为ViewPager设置SimpleViewPagerIndicator
2015-02-14 13:45 4728说到ViewPagerIndicator,网上有很多专门的开源 ... -
一个典型的从下部弹上来的Dialog
2014-12-05 14:47 6077典型的看图 import android.app ...
相关推荐
java sql操作工具类 java sql操作工具类java sql操作工具类 java sql操作工具类java sql操作工具类 java sql操作工具类java sql操作工具类 java sql操作工具类java sql操作工具类 java sql操作工具类java sql操作...
java 转义和反转义工具类 java 转义和反转义工具类java 转义和反转义工具类 java 转义和反转义工具类java 转义和反转义工具类 java 转义和反转义工具类java 转义和反转义工具类 java 转义和反转义工具类java 转义和...
java ID生成器工具类 java ID生成器工具类java ID生成器工具类 java ID生成器工具类java ID生成器工具类 java ID生成器工具类java ID生成器工具类 java ID生成器工具类java ID生成器工具类 java ID生成器工具类java ...
`RabbitmqUtil` 是一个专门为Java开发者设计的工具类,简化了与RabbitMQ交互的复杂过程,使得开发者能够更快速、更方便地发送和接收消息。 首先,我们来详细了解一下`RabbitmqUtil`工具类的主要功能: 1. **连接...
在C#编程中,工具类(Utility Class)是一种常见的设计模式,它封装了一些常用的功能,以便在项目中方便地重复使用。这些工具类通常包含静态方法,不涉及实例化,直接通过类名调用,降低了代码冗余,提高了代码复用...
在C++编程中,工具类是非常重要的一部分,它们提供了一系列通用功能,可以帮助开发者更高效地进行项目开发。本文将深入探讨标题"**C++工具类-常用工具类源码**"所涵盖的知识点,主要围绕文件处理、编码处理、字符串...
java 验证码工具类 java 验证码工具类 java 验证码工具类java 验证码工具类 java 验证码工具类 java 验证码工具类java 验证码工具类 java 验证码工具类 java 验证码工具类java 验证码工具类 java 验证码工具类 java ...
jedis的工具类,java代码写的,非常全面,jedis的工具类,java代码写的,非常全面jedis的工具类,java代码写的,非常全面jedis的工具类,java代码写的,非常全面jedis的工具类,java代码写的,非常全面jedis的工具类...
java 媒体类型工具类java 媒体类型工具类java 媒体类型工具类 java 媒体类型工具类java 媒体类型工具类java 媒体类型工具类 java 媒体类型工具类java 媒体类型工具类java 媒体类型工具类 java 媒体类型工具类java ...
该工具类提供了多种方法来发送 GET、POST、PUT、DELETE 等请求,并且支持设置超时时间、代理服务器、证书验证等功能。 关键代码分析 在 HttpUtils 工具类中,有一些关键的代码需要特别注意: 1. `init()` 方法:...
在Android应用开发中,工具类(Utils)是程序员经常使用的辅助模块,它们包含了一系列静态方法,用于处理各种常见的任务,从而提高代码的复用性和可维护性。本资源"Android快速开发系列 10个常用工具类 程序源码...
C# Util中的Json工具类通常提供了序列化和反序列化JSON对象的方法,如将C#对象转换为JSON字符串,或者将JSON字符串解析为C#对象,这在处理API请求或保存配置文件时非常有用。 2. **Net**: 这部分可能包含网络通信...
该工具类是Java编写下载即可使用,该工具类中有生成各种长度的订单号,有英文数字混合的,有数字的
`MapUtils`工具类就是为了解决这样的问题而设计的,它简化了`Map`对象和实体类之间的转换过程。本篇文章将深入探讨`MapUtils`工具类的使用及其在Java开发中的重要性。 首先,让我们了解一下实体类。在Java中,实体...
通用restful返回工具类
C#常用工具类代码集合Util第二版本(自己工作总结),包括常用工具类,扩展方法工具类,百度地图C#工具类,Echart工具类,Office工具类,Autofac工具类,Web开发常用工具类,Winform开发常用工具类,是自己工作十年...
本文将详细探讨如何使用RestSharp以及如何通过创建一个名为`RestSharpUtil`的工具类来进一步封装它,以提高代码的复用性和易用性。 首先,我们来看`RestSharpUtil`的核心概念。这个工具类的目的是减少对`Rest...
在Java编程领域,工具类(Utility Class)是程序员日常工作中不可或缺的部分。这些工具类提供了许多通用功能,可以简化代码编写,提高开发效率。标题提到的"50个左右的JAVA工具类,相对比较全"表明这是一个集合了大量...
MinIO通用上传工具类
java 进制转换工具类 java 进制转换工具类java 进制转换工具类 java 进制转换工具类java 进制转换工具类 java 进制转换工具类