我正在尝试使用带有通知的TaskStackBuilder为后退按钮创建一个后台堆栈.我的应用正常流程:
有时,在用户未使用我的应用程序的后台更新后,我会生成通知.如果他们单击此通知,则会启动活动C,跳过A和B.我正在尝试遵循设计准则并创建一个后备堆栈,因此当他们按下它时将转到活动B而不是主屏幕.我的问题是,活动B需要额外的启动意图来告诉它从数据库中获取什么.
我当前的TaskStackBuilder代码:
TaskStackBuilder sBuilder = TaskStackBuilder.create( this );
sBuilder.addParentStack( ActivityC.class );
sBuilder.addNextIntent( launchIntent );
pIntent = sBuilder.getPendingIntent( 0, PendingIntent.FLAG_ONE_SHOT );
Run Code Online (Sandbox Code Playgroud)
单击通知启动活动C就好了,但是当我按回来时,它会IllegalArgumentException
从我的ContentProvider中爆炸,因为活动B不知道要请求的ID.有没有办法把这个额外的东西放到后面的堆栈中还是我被卡住了?
paw*_*eba 56
这一行:
sBuilder.addParentStack( ActivityC.class );
Run Code Online (Sandbox Code Playgroud)
声明补充说所有的父母ActivityC
在AndroidManifest.xml
的<meta-data>
.我不知道它是什么,我没有用过它.我怀疑你需要它.
此行为数组添加了意图:
sBuilder.addNextIntent(launchIntent);
Run Code Online (Sandbox Code Playgroud)
那么意图数组用于创建PendingIntent,可能是PendingIntent.getActivities,我找不到实现,然后在Context.startActivities的某个地方启动.
我想你只需要创建一组意图,你可以在那里添加额外内容:
Intent activityA = new Intent(context, ActivityA.class);
activityA.putExtra(key, valueA);
Intent activityB = new Intent(context, ActivityB.class);
activityB.putExtra(key, valueB);
Intent activityC = new Intent(context, ActivityC.class);
activityC.putExtra(key, valueC);
Run Code Online (Sandbox Code Playgroud)
并将它们添加到构建器:
sBuilder.addNextIntent(activityA);
sBuilder.addNextIntent(activityB);
sBuilder.addNextIntent(activityC);
pIntent = sBuilder.getPendingIntent( 0, PendingIntent.FLAG_ONE_SHOT );
Run Code Online (Sandbox Code Playgroud)
我没有测试过,这只是我快速研究的结果,我希望如果我错了,有人会纠正我.
Dan*_*tte 13
我找到了解决此问题的另一种方法:使用方法TaskStackBuilder.editIntentAt(int)
恩.
Intent intentC = new Intent(context, ActivityC.class);
intentC.putExtra(key, valueC);
TaskStackBuilder sBuilder = TaskStackBuilder.create(this)
.addParentStack(ActivityB.class)
.addParentStack(ActivityC.class)
.addNextIntent(intentC);
Intent intentA = sBuilder.editIntentAt(0);
intentA.putExtra(key, value);
Intent intentB = sBuilder.editIntentAt(1);
intentB.putExtra(key, value);
Run Code Online (Sandbox Code Playgroud)
小智 9
我一直在努力解决这个问题.我的研究得出了以下解决方案(非常类似于@pawelzieba,但有一个重要的删除):
Intent activityA = new Intent(context, ActivityA.class);
activityA.putExtra(key, valueA);
Intent activityB = new Intent(context, ActivityB.class);
activityB.putExtra(key, valueB);
Intent activityC = new Intent(context, ActivityC.class);
activityC.putExtra(key, valueC);
TaskStackBuilder sBuilder = TaskStackBuilder.create(this)
.addNextIntent(activityA);
.addNextIntent(activityB);
.addNextIntent(activityC);
PendingIntent pIntent = sBuilder.getPendingIntent( 0, PendingIntent.FLAG_UPDATE_CURRENT );
Run Code Online (Sandbox Code Playgroud)
请注意,您不应该使用父关联修改清单,并且您不希望使用:
sBuilder.addParentStack( ActivityC.class );
Run Code Online (Sandbox Code Playgroud)
否则你将在新创建的任务中获得ActivityA和ActivityB的重复,这些任务具有没有额外内容的意图.如果您不需要传递带有额外内容的意图,则可以在清单中添加父关联并调用addParentStack().
归档时间: |
|
查看次数: |
15444 次 |
最近记录: |