2011-11-01 51 views
3

我有两个(或多个)小部件,例如, A和B,它们应该启动相同的活动,将appWidgetId中的Intent附加内容传递给该活动。这可以在应用程序安装后从任何窗口小部件首次启动后正常工作(活动接收到正确的appWidgetId)。如果在活动启动后按下后退按钮并从其他窗口小部件启动活动,它也可以正常工作。但是,如果我从小部件A启动活动,请点击主页按钮,然后从小部件B(或C或D ...)启动活动,并使用A的appWidgetId启动活动。我很困惑如何解决这个问题。这里是我如何申报我的PendingIntent主页按下后不正确的PendingIntent正在启动

Intent intent = new Intent(context, WidgetActivity.class); 
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId); 
intent.setAction(this.getClass().getName() + System.currentTimeMillis()); 
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 
             PendingIntent.FLAG_UPDATE_CURRENT); 

如果我理解正确的,我成功地建立独特PendingIntents为每个插件。最受赞赏的任何帮助!

编辑: 接受的答案,以this question认为:

我认为,问题是,你有一个的PendingIntent,只有额外的不同。 PendingIntents被缓存,所以如果你使用两个相同的动作和数据,它们会相互覆盖。

但是,我的代码创建一个随机的行动来执行,所以我觉得我的PendingIntents比更差只是群众演员

回答

2

看起来我需要刷上了我的活动生命周期事件。答案是下面的代码把我的活动:

@Override 
protected void onNewIntent(Intent intent) { 
    setIntent(intent); 
    super.onNewIntent(intent); 
} 

的问题是,在主页按钮按下时,活性持有到原来Intent它推出它。然后,当其他小部件启动活动时,原始意图被重用。上面的代码只是用新的代码替换原来的意图,并继续进行剩余的生命周期事件。

+0

你是一个救星!一直坚持这个这么久,谢谢! – Lars

+0

@Lars,优秀!我花了很多年试图解决这个问题,很高兴看到别人从我的经验教训中获利:) –

+0

这么简单,它的工作!非常感谢。 – yuku