Activity与Fragment通用的跳转工具类JumpUtil的实现
来源:互联网 发布:2017中国经济数据 编辑:程序博客网 时间:2024/05/29 13:43
工具类由来:
每次跳转到其他的Activity我们都要实例化一个Intent,有时为了传递数据还要实例化一个Bundle,这些代码说多不多但是说少也不少,于是我便想着如果能够将跳转的功能封装一下,是不是就能够稍微偷点懒呢?
先看下使用方法真的很简单:
//实现JumpInterface接口public class JumpUtilTestActivity extends AppCompatActivity implements JumpUtil.JumpInterface { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main2); //直接跳转 JumpUtil.GotoActivity(this, MainActivity.class); //带着Bundle直接跳转 JumpUtil.GotoActivity(this, new Bundle(), MainActivity.class); //跳转返回结果 JumpUtil.GotoActivityForResult(this, MainActivity.class, new Bundle(), 200); }}fragment也是同样的使用方法,是不是省去了很多重复的代码。
封装思路:
根据实际开发经验跳转常用的有这两种方式:
1.不带任何数据直接跳转到另外一个Activity.
2.需要通过Bundle带一些数据到另外一个Activity.
于是我们可以抽象出2个静态方法:
/** * 跳转到目标Activity * * @param aimClass */ public static void GotoActivity(Object object, Bundle bundle, Class aimClass) { if (object == null) return; Intent intent = new Intent(); intent.setClass(app, aimClass); if (bundle != null) { intent.putExtras(bundle); } if (object instanceof Fragment) { ((Fragment) object).startActivity(intent); } else if (object instanceof Activity) { ((Activity) object).startActivity(intent); } } /** * startActivityForResult * * @param aimClass * @param bundle * @param requestCode */ public static void GotoActivityForResult(Object object, Class aimClass, Bundle bundle, int requestCode) { if (object == null) return; Intent intent = new Intent(); intent.setClass(app, aimClass); if (bundle != null) { intent.putExtras(bundle); } if (object instanceof Fragment) { ((Fragment) object).startActivityForResult(intent, requestCode); } else if (object instanceof Activity) { ((Activity) object).startActivityForResult(intent, requestCode); } }这样功能确实是实现了但是总觉得不够代码优雅,如何让Fragment和Activity都能够使用的同时,不需要在方法内部判断传入的是什么类型呢?
我们知道跳转调用的是Fragment与Activity的startActivity()与startActivityForResult()两个方法,既然2个类都有相同的方法实现那我们为什么不干脆创建一个接口让接口带有这两个方法呢?
/** * 跳转接口 * Created by z2wenfa on 2016/3/23. */ public interface JumpInterface { /** * 跳转到activity * * @param intent */ void startActivity(Intent intent); /** * 跳转到activi并且返回内容 * * @param intent * @param requestcode */ void startActivityForResult(Intent intent, int requestcode); }因为这2个方法Fragment和Activity都已经实现好了我们只需要在实现基类的时候实现一下这个接口就能够在直接使用这个工具类进行跳转了。
完整代码如下:
/** * Activity或者fragment跳转工具类 * Created by z2wenfa on 2016/9/19. */public class JumpUtil { public static Context app; public static void init(Context context) { app = context; } /** * 跳转到目标Activity(传递Parcelable) * * @param jumpInterface * @param aimClass * @param key * @param parcelable */ public static void GotoActivity(JumpInterface jumpInterface, Class aimClass, String key, Parcelable parcelable) { if (jumpInterface == null) return; Intent intent = new Intent(); intent.setClass(app, aimClass); intent.putExtra(key, parcelable); jumpInterface.startActivity(intent); } /** * 跳转到目标Activity(需要带Bundle) * * @param bundle * @param aimClass */ public static void GotoActivity(JumpInterface jumpInterface, Bundle bundle, Class aimClass) { if (jumpInterface == null) return; Intent intent = new Intent(); if (bundle != null) intent.putExtras(bundle); intent.setClass(app, aimClass); jumpInterface.startActivity(intent); } /** * 跳转到目标Activity * * @param aimClass */ public static void GotoActivity(JumpInterface jumpInterface, Class aimClass) { if (jumpInterface == null) return; Intent intent = new Intent(); intent.setClass(app, aimClass); jumpInterface.startActivity(intent); } /** * startActivityForResult * * @param aimClass * @param bundle * @param requestCode */ public static void GotoActivityForResult(JumpInterface jumpInterface, Class aimClass, Bundle bundle, int requestCode) { if (jumpInterface == null) return; Intent intent = new Intent(); intent.setClass(app, aimClass); if (bundle != null) intent.putExtras(bundle); jumpInterface.startActivityForResult(intent, requestCode); } /** * 跳转接口 * Created by z2wenfa on 2016/3/23. */ public interface JumpInterface { /** * 跳转到activity * * @param intent */ void startActivity(Intent intent); /** * 跳转到activi并且返回内容 * * @param intent * @param requestcode */ void startActivityForResult(Intent intent, int requestcode); }代码是不是看起来稍微优雅了点呢?这样一个跳转的工具类就完成了,以后再也看不到那么多重复的跳转代码了。
0 0
- Activity与Fragment通用的跳转工具类JumpUtil的实现
- fragment与activity之间的跳转实现
- fragment与activity及两个fragment之间的跳转实现
- fragment与activity及两个fragment之间的跳转实现
- fragment与activity及两个fragment之间的跳转实现
- fragment与activity及两个fragment之间的跳转实现
- fragment与activity及两个fragment之间的跳转实现
- fragment与activity及两个fragment之间的跳转实现
- fragment与activity及两个fragment之间的跳转实现
- 使用EventBus实现Activity与Fragment之间的跳转
- Android开发中如何实现外部其他Activity类与指定fragment碎片的相互跳转
- Android开发中如何实现外部其他Activity类与指定fragment碎片的相互跳转
- Android开发中如何实现外部其他Activity类与指定fragment碎片的相互跳转
- (转)fragment与activity及两个fragment之间的跳转实现
- Activity之间、Fragment之间和Activity与Fragment之间的跳转
- Android工具类----Activity之间的跳转
- Activity之间跳转的工具类
- Fragment和Activity跳转的问题
- 聊聊JVM:相对全面的GC总结(专栏)
- uip之protothreads
- php结合数据库演示商品多图片上传
- Weblogic10 与 Websphere MQ7集成方案[1]
- LEETCODE之Combination Sum系列
- Activity与Fragment通用的跳转工具类JumpUtil的实现
- 从输入URL到浏览器显示页面的详细过程
- Safari 3D变换会忽略z-index问题解决
- tomcat6.0与7.0 配置https协议
- FormatMessage函数的用法
- Android 事件输入系统分析计划
- Java thread中对异常的处理策略
- String的一部分替换为星号“*”
- java 对象与对象引用