首页 > 解决方案 > 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()
        )

标签: androidandroid-intentandroid-activityandroid-notifications

解决方案


您在以下位置使用此代码ActivityB

Intent intent = new Intent(this, ActivityA.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP |
        Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivity(intent);

这将返回到先前的实例ActivityA(并删除任务堆栈中位于其之上的任何其他活动),或者如果ActivityA任务中没有现有的实例,那么它将创建一个新实例。


推荐阅读