具有相同ID的Android多个小部件实例

时间:2015-07-02 07:44:11

标签: android widget multiple-inheritance android-pendingintent oncreate

我有问题。我检查了很多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?

0 个答案:

没有答案