无法为活动创建后台堆栈

时间:2017-04-09 09:11:19

标签: android android-intent android-notifications android-pendingintent taskstackbuilder

我收到通知,我想创建一个自定义后台堆栈,以便用户可以浏览它。但是现在点击通知会打开所需的活动但是当我按下后退按钮时它会完全退出应用程序。

setup.exe /s /v/qn

清单文件

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);

我希望它工作的方式是,点击用户被带到的通知 NotifViewActivity 然后按下后退按钮时,用户将被带到 NotifActivity ,再次按下后退按钮时,用户将被带到 HomeActivity 。想要创建的层次结构,我该怎么做?

3 个答案:

答案 0 :(得分:5)

您应该以这种方式构建任务堆栈:

    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);

答案 1 :(得分:0)

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

答案 2 :(得分:-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();
        }