情况1:A->D
情况2:A->B->D
情况3:A->B->C->D
活动D有两种操作:
1、不进行任何操作,需要直接返回上一级
2、设置密码/修改密码,成功后返回A
情况1,A->D,设置密码,成功后返回A,A需要判断返回的值然后刷新界面
情况2、3,修改密码,成功后返回A
给A设置如下启动模式,D操作完成后去启动A即可
FLAG_ACTIVITY_CLEAR_TOP | FLAG_ACTIVITY_SINGLE_TOP
FLAG_ACTIVITY_CLEAR_TOP
FLAG_ACTIVITY_SINGLE_TOP
如果目标 Activity 已经在任务栈的顶部,不会创建新的实例,而是重新使用已存在的实例。
FLAG_ACTIVITY_CLEAR_TOP | FLAG_ACTIVITY_SINGLE_TOP
结合使用这两个标志,可以确保目标 Activity 在任务栈中的唯一实例位于顶部
,并且不会创建新的实例。通常用于返回到应用的主界面。
ActivityA:
companion object {
fun startAc(context: Context?) {
var intent = Intent(context, ActivityA::class.java)
// 确保目标 Activity 在任务栈中的唯一实例位于顶部,并且不会创建新的实例
intent.addFlags(FLAG_ACTIVITY_CLEAR_TOP or FLAG_ACTIVITY_SINGLE_TOP)
context?.startActivity(intent)
}
}
ActivityA.startAc(activity, REQUEST_PASSWORD, ActivityD.TYPE_SET_PASSWORD)
ActivityB.startAc(activity, ActivityD.TYPE_CHANGE_PASSWORD_VIA_VERIFIED_NUMBER)
ActivityC.startAc(activity, ActivityD.TYPE_CHANGE_PASSWORD_VIA_OLD_PASSWORD)
ActivityD:
companion object {
const val TYPE_SET_PASSWORD = 1
const val TYPE_CHANGE_PASSWORD_VIA_VERIFIED_NUMBER = 2
const val TYPE_CHANGE_PASSWORD_VIA_OLD_PASSWORD = 3
fun startAc(activity: Activity?, requestCode: Int, type: Int) {
var intent = Intent(activity, ActivityD::class.java)
intent.putExtra(Constance.EXTRA_ARG1, type)
activity?.startActivityForResult(intent, requestCode)
}
fun startAc(context: Context?, type: Int) {
var intent = Intent(context, ActivityD::class.java)
intent.putExtra(Constance.EXTRA_ARG1, type)
context?.startActivity(intent)
}
}
if (type == TYPE_SET_PASSWORD) {
setResult(RESULT_OK)
} else {
ActivityA.startAc(activity)
}
finish()
参考: