android - Android回到backstack中的一个活动或打开它
问题描述
我在管理后台的活动时遇到了困难。如果用户点击通知然后活动 B 被打开,在某些时候活动 B 将被关闭并且我需要打开活动 A,但是在这里我可以有两种情况,如果活动 A 已经打开并且在后台堆栈中,那么我想要回到这个而不重新打开它,如果活动 A 从未打开过,那么我必须打开它。我怎样才能做到这一点?
val notifyIntent = Intent(context, ActivityB::class.java).apply {
flags = Intent.FLAG_ACTIVITY_NEW_TASK
putExtra(MODEL_KEY, model)
}
NotificationManagerCompat.from(context).notify(
Date().time.toInt(),
Builder(context, NotificationSettings.channelId)
.setSmallIcon(NotificationSettings.smallIconId)
.setContentTitle(remoteMessage.notification?.title ?: remoteMessage.data[BODY])
.setContentText(remoteMessage.notification?.body ?: remoteMessage.data[SOURCE])
.setStyle(
BigTextStyle().bigText(
remoteMessage.notification?.body ?: remoteMessage.data[SOURCE]
)
)
.setPriority(PRIORITY_DEFAULT)
.setContentIntent(
getActivity(
context, 0, notifyIntent, FLAG_UPDATE_CURRENT
)
)
.setAutoCancel(true).build()
)
解决方案
您在以下位置使用此代码ActivityB
:
Intent intent = new Intent(this, ActivityA.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP |
Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivity(intent);
这将返回到先前的实例ActivityA
(并删除任务堆栈中位于其之上的任何其他活动),或者如果ActivityA
任务中没有现有的实例,那么它将创建一个新实例。
推荐阅读
- django - Django:如何从模型关系创建查询集?
- c# - 是否可以将表动态映射到实体框架核心或任何其他 ORM
- javascript - 飞越图表时出现此错误:TypeError: Cannot read property 'lineWidth' of undefined
- objective-c - 如何在 swift 类中实现目标 C 协议?
- r - R中predict()和model$coefficiest*vector之间的区别?
- angular - 在 Angular 7 中下载文件(大文件流式传输)
- python - 使用 numpy 进行 MXNet 参数序列化
- ios - Swift:将 ISO8601 转换为日期
- python-3.x - 捕获所有文本直到下一次出现,包括正则表达式中的换行符(Python 3.x)
- json - 在 Powershell 中过滤 JSON