Виджет - Намерение остается неизменным при получении

1

Я добавляю контактные изображения в виджет динамически. Это мой код для этой части:

for (int x = 0; x < this.appWidgetIds.length; x++){
        int id = this.appWidgetIds[x];
        RemoteViews rv = new RemoteViews(this.context.getPackageName(), R.layout.widget);
        for (int i = 0; i < maxCount; i++){
            String lookupKey = sortedItems.get(i).getLookupKey();
            Tools.ToLog("LOOKUPKEY=" + lookupKey);
            Bitmap bmp = Contact.getContactPicture(this.context, lookupKey);
            if (bmp != null){
                Intent intent = new Intent(context, ContactsWidget.class);
                intent.setAction(ACTION_WIDGET_RECEIVER);
                intent.putExtra(ITENT_LOOKUPKEY, lookupKey);
                Tools.ToLog("LOOKUPKEY - IDENT=" + intent.getStringExtra(ITENT_LOOKUPKEY));

                RemoteViews itemView = new RemoteViews(this.context.getPackageName(), R.layout.widget_itemview);
                itemView.setImageViewBitmap(R.id.widget_ImageView, bmp);
                PendingIntent actionPendingIntent = PendingIntent.getBroadcast(this.context, 0, intent, 0);
                itemView.setOnClickPendingIntent(R.id.widget_ImageView, actionPendingIntent);
                rv.addView(R.id.widgetContainer, itemView);
            }
        }
        appWidgetManager.updateAppWidget(id, rv);
    }

Я проверил Lookupkey и lookupkey с намерением над журналом, и он работает на этой стороне (переменная lookupKey == intent.getStringExtra(ITENT_LOOKUPKEY)). Когда я теперь получаю намерение, потому что я нажал на контактную картинку, дополнительная информация о намерениях всегда одна и та же. Независимо от того, какую контактную картинку я нажал. Это код получения:

public void onReceive(Context context, Intent intent) {
    if (intent.getAction().equals(ACTION_WIDGET_RECEIVER)) {
        String lookupKey = intent.getStringExtra(ITENT_LOOKUPKEY);
        Toast.makeText(context, "Lookup Key: " + lookupKey, Toast.LENGTH_SHORT).show();
        //Contact.openContact(this.context, lookupKey);             
    }
    super.onReceive(context, intent);
}

Это всегда lookupKey из первого добавленного контакта. Должен ли я как-то очистить намерение до добавления другого контакта в первую функцию или в чем проблема?

Теги:
widget
android-intent

1 ответ

2
Лучший ответ

У вас есть только один PendingIntent.

Цитирование документации:

Если впоследствии приложение-создатель повторно извлекает один и тот же вид PendingIntent (та же операция, то же действие, данные, категории и компоненты Intent и те же флаги), он получит PendingIntent, представляющий один и тот же токен, если это все еще действует

Поскольку вы каждый раз выполняете одну и PendingIntent же операцию (getActivity()) и одни и те же элементы маршрутизации Intent, существует только один PendingIntent.

Вместо того, чтобы установить действие ACTION_WIDGET_RECEIVER, сделайте его уникальным для каждого, который вы создаете в своих циклах.

  • 0
    Спасибо за вашу помощь :)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню