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。这就是我的层次结构我正在尝试创建,我该怎么做?

4

3 回答 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);
于 2017-04-09T09:55:57.083 回答
0

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

于 2019-05-23T08:07:05.250 回答
-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();
        }
于 2017-04-09T10:01:09.717 回答