我有问题。我检查了很多stackoverflow讨论,但我没有为我找到正确的解决方案。
我有一个小部件,OpenCloseWidget有两个按钮,'open'和'close'。 我也有配置活动。
我的问题是小部件的最后一个ID正用于每个小部件。
这是我的onUpdate方法:
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
Log.i(LOG_TAG, "[onUpdate] appWidgetIds.length = " + appWidgetIds.length);
for (int i : appWidgetIds) {
appWidgetId = i;
Log.d(LOG_TAG, "[onUpdate " + i + "] The widget id is: " + i);
RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.open_close_layout);
XMPPServiceInterface remoteService = null;
bindToService(remoteService, context);
openCloseInfo.setItem(appWidgetId, views, context, OpenCloseProvider.this, remoteService, null);
Log.i(LOG_TAG, "[onUpdate " + i + "] The openCloseInfo.size(): " + openCloseInfo.size());
openCloseInfo.get(appWidgetId).first.getRemoteViews().setOnClickPendingIntent(R.id.openButton,
getPendingSelfIntent(context, context.getResources().getString(R.string.label_open), i));
openCloseInfo.get(appWidgetId).first.getRemoteViews().setOnClickPendingIntent(R.id.closeButton,
getPendingSelfIntent(context, context.getResources().getString(R.string.label_close), i));
appWidgetManager.updateAppWidget(i, openCloseInfo.get(i).first.getRemoteViews());
setToDefault(context, i);
}
}
我的未决方法:
private PendingIntent getPendingSelfIntent(Context context, String action, int id) {
Intent intent = new Intent(context, OpenCloseProvider.class).setAction(action)
.setData(Uri.withAppendedPath(Uri.parse("://widget/id/"), String.valueOf(id)))
.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, id).addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
PendingIntent temp = PendingIntent.getBroadcast(context, id, intent, 0);
Log.d(LOG_TAG, "[getPendingSelfIntent " + appWidgetId + "]" + temp);
return temp;
}
问题是在onReceive()中我获得了最后一个小部件ID。 如何为onRecive()设置正确的ID?