无法为活动创建返回堆栈
Unable to create back stack for activities
我收到了一条通知,我想创建一个自定义返回堆栈,这样用户就可以在 it.But 中导航,现在点击通知会打开所需的 activity,但是当我按下后退按钮它完全退出应用程序。
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 。这就是我要创建的层次结构,我该怎么做?
您应该以这种方式构建任务堆栈:
stackBuilder.addParentStack(HomeActivity.class);
stackBuilder.addParentStack(NotifActivity.class);
stackBuilder.addNextIntentWithParentStack(resultIntent);
或者实际上因为您已经在清单中指定了 activity 层次结构,您只需一行即可完成:
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);
试试这个:
将下面的代码放入 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();
}
对于任何试图用 TaskStackBuilder
启动创建的 activity 的人,请遵循@Divers 解决方案,然后使用 taskStackBuilder.startActivities()
.
我收到了一条通知,我想创建一个自定义返回堆栈,这样用户就可以在 it.But 中导航,现在点击通知会打开所需的 activity,但是当我按下后退按钮它完全退出应用程序。
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 。这就是我要创建的层次结构,我该怎么做?
您应该以这种方式构建任务堆栈:
stackBuilder.addParentStack(HomeActivity.class);
stackBuilder.addParentStack(NotifActivity.class);
stackBuilder.addNextIntentWithParentStack(resultIntent);
或者实际上因为您已经在清单中指定了 activity 层次结构,您只需一行即可完成:
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);
试试这个: 将下面的代码放入 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();
}
对于任何试图用 TaskStackBuilder
启动创建的 activity 的人,请遵循@Divers 解决方案,然后使用 taskStackBuilder.startActivities()
.