无法为活动创建返回栈

4

我收到了一条通知,想要创建自定义的返回栈,以便用户可以通过它进行导航。但是目前点击通知会打开所需的活动,但当我按下返回按钮时,它会完全退出应用程序。

Intent resultIntent = new Intent(this, NotifViewActivity.class);
    resultIntent.putExtra(StringHolder.NOTIFICATION_ID, notif.getId());

    TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);
    stackBuilder.addParentStack(HomeActivity.class);
    stackBuilder.addParentStack(NotifActivity.class);
    stackBuilder.addNextIntent(resultIntent);
    PendingIntent resultPendingIntent = stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT);

    NotificationCompat.Builder notificationCompat = new NotificationCompat.Builder(context)
            .setAutoCancel(true)
            .setContentTitle(notif.getTitle())
            .setSmallIcon(R.drawable.ic_launcher)
            .setContentIntent(resultPendingIntent);

清单文件

<activity
        android:name=".NotifActivity"
        android:parentActivityName=".HomeActivity">
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value=".HomeActivity" />
    </activity>
    <activity
        android:name=".NotifViewActivity"
        android:parentActivityName=".NotifActivity">
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value=".NotifActivity" />
    </activity>

我希望它能这样工作,在通知被点击后,用户将进入NotifViewActivity,然后按返回按钮将返回NotifActivity,再次按返回按钮将返回HomeActivity。这就是我想要创建的层次结构,我应该怎么做呢?
3个回答

9

你应该按照以下方式构建任务堆栈:

    stackBuilder.addParentStack(HomeActivity.class);
    stackBuilder.addParentStack(NotifActivity.class);
    stackBuilder.addNextIntentWithParentStack(resultIntent);

实际上,因为您已经在清单中指定了活动层次结构,所以您只需要一行代码即可完成:

   stackBuilder.addNextIntentWithParentStack(resultIntent);

另一个实现相同目的的方式是在清单中不指定层级结构

    Intent mainActivityIntent = new Intent(this, HomeActivity.class);
    Intent notifActivityIntent = new Intent(this, NotifActivity.class);
    stackBuilder.addNextIntent(mainActivityIntent);
    stackBuilder.addNextIntent(notifActivityIntent);
    stackBuilder.addNextIntent(resultIntent);

奇怪的是我的情况和这个一模一样,但在模拟器上直到我卸载并重新安装应用程序后才能正常工作!! - Bakhshi

0

对于任何试图使用TaskStackBuilder启动创建的活动的人,请遵循@Divers的解决方案,然后使用taskStackBuilder.startActivities()


你把 taskStackBuilder.startActivities(); 放在哪里? - CanCoder

-2
尝试这个: 将下面的代码放入NotifViewActivity中。
 @Override
        public void onBackPressed() {
            Intent i = new Intent(this, HomeActivity.class);
        i.putExtra("exit", true);
        i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        startActivity(i);
        super.onBackPressed();
        }

i.putExtra("exit", true);i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 的意义是什么? - Divers
https://developer.android.com/reference/android/content/Intent.html#FLAG_ACTIVITY_CLEAR_TOP - Santosh Bachkar
那么,它如何应用于当前作者的问题?它将如何添加到后退栈“HomeAcitivty”中?它实际上只适用于通过点击通知打开的情况吗?在extras中添加“exit - true”如何帮助? - Divers
i.putExtra("exit", true);,这是可选的。 - Santosh Bachkar
你试过这个吗? - Santosh Bachkar
@SantoshBachkar 这种方法总是可行的,我知道这个解决方案,但考虑到有一个标准解决方案可用,它更像是一个变通方法。 - Jude Fernandes

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接