将常用的页面跳转做了下封装,方便使用。
源码
public class IntentUtils {
private static volatile IntentUtils sInstance = null;
private IntentUtils() {
}
public static IntentUtils getDefault() {
if (null == sInstance) {
synchronized (IntentUtils.class) {
if (null == sInstance) {
sInstance = new IntentUtils();
}
}
}
return sInstance;
}
/**
* 跳转Activity
*
* @param sourcePage 源 (Activity)
* @param targetPage 目标
* @param bundle 数据
*/
public void startActivity(@NotNull Activity sourcePage, @NotNull Class<? extends Activity> targetPage, Bundle bundle) {
startActivity(sourcePage, targetPage, bundle, -1);
}
/**
* 跳转Activity
*
* @param sourcePage 源 (Activity)
* @param targetPage 目标
* @param requestCode 请求码
*/
public void startActivity(@NotNull Activity sourcePage, @NotNull Class<? extends Activity> targetPage, int requestCode) {
startActivity(sourcePage, targetPage, null, requestCode);
}
/**
* 跳转Activity
*
* @param sourcePage 源 (Activity)
* @param targetPage 目标
* @param bundle 数据
* @param requestCode 请求码
*/
public void startActivity(@NotNull Activity sourcePage, @NotNull Class<? extends Activity> targetPage, Bundle bundle, int requestCode) {
if (-1 == requestCode) {
sourcePage.startActivity(processIntent(sourcePage, targetPage, bundle));
} else {
sourcePage.startActivityForResult(processIntent(sourcePage, targetPage, bundle), requestCode);
}
}
/**
* 跳转Activity
*
* @param sourcePage 源 (Fragment)
* @param targetPage 目标
* @param bundle 数据
*/
public void startActivity(@NotNull Fragment sourcePage, @NotNull Class<? extends Activity> targetPage, Bundle bundle) {
startActivity(sourcePage, targetPage, bundle, -1);
}
/**
* 跳转Activity
*
* @param sourcePage 源 (Fragment)
* @param targetPage 目标
* @param requestCode 请求码
*/
public void startActivity(@NotNull Fragment sourcePage, @NotNull Class<? extends Activity> targetPage, int requestCode) {
startActivity(sourcePage, targetPage, null, requestCode);
}
/**
* 跳转Activity
*
* @param sourcePage 源 (Fragment)
* @param targetPage 目标
* @param bundle 数据
* @param requestCode 请求码
*/
public void startActivity(@NotNull Fragment sourcePage, @NotNull Class<? extends Activity> targetPage, Bundle bundle, int requestCode) {
Activity activity = (Activity) sourcePage.getContext();
if (null != activity) {
if (-1 == requestCode) {
sourcePage.startActivity(processIntent(activity, targetPage, bundle));
} else {
sourcePage.startActivityForResult(processIntent(activity, targetPage, bundle), requestCode);
}
}
}
/**
* 销毁界面并携带结果码
*
* @param activity 源
* @param resultCode 结果码
*/
public void finishForResult(@NotNull Activity activity, int resultCode) {
finishForResult(activity, null, resultCode);
}
/**
* 销毁界面并携带结果码和数据
*
* @param activity 源
* @param bundle 数据
* @param resultCode 结果码
*/
public void finishForResult(@NotNull Activity activity, Bundle bundle, int resultCode) {
Intent intent = new Intent();
if (null != bundle) {
intent.putExtra(Content.bundle, bundle);
}
activity.setResult(resultCode, intent);
activity.finish();
}
/**
* 在当前Activity获取Intent携带的Bundle
*
* @param activity 当前Activity
* @return Bundle
*/
public Bundle getIntentBundle(@NotNull Activity activity) {
Intent intent = activity.getIntent();
if (null != intent) {
return intent.getBundleExtra(Content.bundle);
}
return null;
}
/**
* 获取Intent
*
* @param sourcePage 源
* @param targetPage 目标
* @param bundle 数据
* @return Intent
*/
private Intent processIntent(@NotNull Context sourcePage, @NotNull Class<? extends Activity> targetPage, Bundle bundle) {
Intent intent = new Intent(sourcePage, targetPage);
if (null != bundle) {
intent.putExtra(Content.bundle, bundle);
}
return intent;
}
}
使用方法
由当前Activity跳转目标Activity
IntentUtils.getDefault().startActivity(
this,
TargetActivity.class);
由当前Activity跳转目标Activity,携带数据(只封装了Bundle)
IntentUtils.getDefault().startActivity(
this,
TargetActivity.class,
bundle);
由当前Activity跳转目标Activityy,携带数据(只封装了Bundle)和请求码
IntentUtils.getDefault().startActivity(
this,
TargetActivity.class,
bundle,
REQUEST_CODE);
销毁当前Activity并携带结果码
IntentUtils.getDefault().finishForResult(
this,
RESULT_CODE);
销毁当前Activity并携带数据(只封装了Bundle)和结果码
IntentUtils.getDefault().finishForResult(
this,
bundle
RESULT_CODE);
在当前Activity接收Intent的数据(只封装了Bundle)
IntentUtils.getDefault().getIntentBundle(this);
其它
如果有任何问题,欢迎评论,一起进步!!!