- 浏览: 5820868 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (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 1184最近项目要开发一个新版本,发现项目中许多布局大致都相同改动不大 ... -
RecyclerView:带header&footer&加载更多
2015-09-09 16:24 2968接上一篇 由简到繁,循序渐进 实现了: 0,点击&长按 ... -
RecyclerView:带header和footer的grid
2015-09-09 13:47 3044知道原理后,为RecyclerView实现同时带header和 ... -
RecyclerView:带header的grid
2015-09-09 13:01 2430RecyclerView是一个高度可定制性的View 本文将使 ... -
iconify使用文本替换icon测试
2015-08-28 17:12 1690源项目地址 https://github.com/JoanZa ... -
快速上传头像到服务端工具类FaceUtil
2015-07-12 14:22 3076快速迭代用 import java.io.DataOut ... -
HorizontalScrollView+RadioGroup+ViewPager+FragmentPagerAdapter基本结构
2015-07-12 13:56 3294快速迭代用 import java.util.Arr ... -
LoadMoreListView+SwipeRefreshLayout(分页下拉)基本结构
2015-07-12 13:07 4154一切为了快速迭代 import java.util. ... -
RadioButton+ViewPager+FragmentPagerAdapter快速搭建页面结构
2015-07-12 11:08 2562一切为了快速开发 开发类似界面 import and ... -
为ViewPager设置CirclePageIndicator(小圆点)
2015-07-03 16:54 15327一切为了快速迭代! import android.con ... -
简单实现可以多选的ProductListDialog<T>
2015-06-25 22:33 1257只是一个范例,是为了代码快速迭代而写的 使用了listView ... -
基于上一篇写的SimplePairListPopupWindow<F,S>
2015-06-19 11:15 1536这次使用Pair<F,S>实现一个简单的Simpl ... -
基于上一篇实现的SimpleListPopupWindow<T>
2015-06-19 11:11 1518这次是个简单的PopupWindow,快速迭代用。 imp ... -
实现一个快速简单的SimpleListDialog<T>
2015-06-19 10:59 1745我写这样的文章都是为了快速迭代,所以都写的比较简单,谅解 此 ... -
为ViewPager设置SimpleViewPagerIndicator
2015-02-14 13:45 4726说到ViewPagerIndicator,网上有很多专门的开源 ... -
一个典型的从下部弹上来的Dialog
2014-12-05 14:47 6075典型的看图 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 媒体类型工具类java 媒体类型工具类java 媒体类型工具类 java 媒体类型工具类java 媒体类型工具类java 媒体类型工具类 java 媒体类型工具类java 媒体类型工具类java 媒体类型工具类 java 媒体类型工具类java ...
HTTPClient工具类,完整,HTTPClient工具类,完整,HTTPClient工具类,完整HTTPClient工具类,完整,HTTPClient工具类,完整
C# Util中的Json工具类通常提供了序列化和反序列化JSON对象的方法,如将C#对象转换为JSON字符串,或者将JSON字符串解析为C#对象,这在处理API请求或保存配置文件时非常有用。 2. **Net**: 这部分可能包含网络通信...
该工具类提供了多种方法来发送 GET、POST、PUT、DELETE 等请求,并且支持设置超时时间、代理服务器、证书验证等功能。 关键代码分析 在 HttpUtils 工具类中,有一些关键的代码需要特别注意: 1. `init()` 方法:...
该工具类是Java编写下载即可使用,该工具类中有生成各种长度的订单号,有英文数字混合的,有数字的
`MapUtils`工具类就是为了解决这样的问题而设计的,它简化了`Map`对象和实体类之间的转换过程。本篇文章将深入探讨`MapUtils`工具类的使用及其在Java开发中的重要性。 首先,让我们了解一下实体类。在Java中,实体...
C#常用工具类代码集合Util第二版本(自己工作总结),包括常用工具类,扩展方法工具类,百度地图C#工具类,Echart工具类,Office工具类,Autofac工具类,Web开发常用工具类,Winform开发常用工具类,是自己工作十年...
java Excel相关处理 工具类 java Excel相关处理 工具类java Excel相关处理 工具类 java Excel相关处理 工具类java Excel相关处理 工具类 java Excel相关处理 工具类java Excel相关处理 工具类 java Excel相关处理 ...
字符串是编程中最常见的数据类型之一,Java的`String`类提供了丰富的内置方法,但有时我们还需要更高级的功能,如`StringUtils`(来自Apache Commons Lang库)提供了一些额外的实用功能,如字符串的空白判断、替换...
在Java编程领域,工具类(Utility Class)是程序员日常工作中不可或缺的部分。这些工具类提供了许多通用功能,可以简化代码编写,提高开发效率。标题提到的"50个左右的JAVA工具类,相对比较全"表明这是一个集合了大量...
java Serivlet 工具类 java Serivlet 工具类java Serivlet 工具类 java Serivlet 工具类java Serivlet 工具类 java Serivlet 工具类java Serivlet 工具类 java Serivlet 工具类java Serivlet 工具类 java Serivlet ...
java 进制转换工具类 java 进制转换工具类java 进制转换工具类 java 进制转换工具类java 进制转换工具类 java 进制转换工具类
在Android开发过程中,工具类(Utils Class)是开发者经常使用的代码模块,它们包含了各种通用功能,可以帮助我们提高开发效率,减少重复工作。"android开发各种工具类"这个资源集合了作者在开发实践中积累的一些...
HttpClientHelper 是一个C#编写的工具类,主要目的是简化HTTP客户端操作,提供同步和异步的请求方法,返回数据格式多样,包括字符串、泛型类型和XML。在爬虫开发中,这样的工具类非常实用,因为爬虫经常需要与各种...
在Android开发过程中,工具类是不可或缺的一部分,它们可以极大地提高开发效率,简化代码,使得开发者能够更加专注于核心功能的实现。以下是一些Android开发中常用的工具类及其详细知识点: 1. **日志工具类**: -...
Java工具类是编程中不可或缺的部分,它们提供了许多实用的功能,帮助开发者提高代码的效率和可维护性。在提供的"30个java工具类"压缩包中,我们可以看到一系列常见的工具类,涵盖了字符串处理、时间日期操作、网络...
字符串工具类,格式字符串、随机数生成、ip区间判断!
该工具类集合包含文字工具类SpannableStringUtils、权限工具类PermissionReq、防止双点击事件工具类NoDoubleClickListener、轻量级存储工具类SpUtil、单例模式toast工具类ToastUtil、Log开关工具类。这些工具类都是...