1

我正在接收通知,我想创建一个自定义备用堆栈,以便用户可以在其中进行导航。但是,现在单击该通知可打开所需的活动,但当我按下后按钮它完全退出应用程序。无法为活动创建备用堆栈

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当再次按下返回按钮时,用户被带到 主页活动。这就是我试图创建的层次结构,我该怎么做?

回答

4

你应该建立自己的任务堆栈方式:

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

这工作perfectly.Thank你 –

+0

欢迎您 – Divers

+0

奇怪的是我的是完全一样,但没有工作,直到我卸载该应用程序并重新安装它! (在模拟器上) – Bakhshi

-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(); 
     } 
+0

'i.putExtra(“exit”,true);''和'i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);'? – Divers

+0

https://developer.android.com/reference/android/content/Intent.html#FLAG_ACTIVITY_CLEAR_TOP –

+0

而且?它如何应用于当前作者的问题?它将如何加入回栈'HomeAcitivty'?实际上它只会在通过点击通知打开灵敏度的情况下工作吗?如何在extras中添加'exit-true'可以提供帮助? – Divers