PendingIntent для виджета

Я разрабатываю виджет Android для отображения контактов, но не могу создать eventClick, когда нажимаю на изображение контакта.

Я использую StackRemoteViewsFactory, например, чтобы добавить контакты в мой GridView.

Вот мой код:

public RemoteViews getViewAt(int position) {

    Bitmap photo = loadContactPhoto(mContext.getContentResolver(), mWidgetItems.get(position).id);

    RemoteViews rv = new RemoteViews(mContext.getPackageName(), R.layout.contact_item);
    rv.setTextViewText(R.id.name, mWidgetItems.get(position).name);
    if (photo != null) {
        rv.setImageViewBitmap(R.id.image, photo);
    }

    final Intent fillInIntent = new Intent();
    final Bundle extras = new Bundle();
    extras.putLong(FavoriteContactsWidgetProvider.CONTACT_ID, mWidgetItems.get(position).id);
    fillInIntent.putExtras(extras);
    rv.setOnClickFillInIntent(R.id.contact_frame, fillInIntent);

    return rv;
}

public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
    for (int i = 0; i < appWidgetIds.length; ++i) {
        final Intent intent = new Intent(context, FavoriteContactsWidgetService.class);
        intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetIds[i]);

        intent.setData(Uri.parse(intent.toUri(Intent.URI_INTENT_SCHEME)));

        RemoteViews rv = new RemoteViews(context.getPackageName(), R.layout.widget_layout);
        rv.setRemoteAdapter(appWidgetIds[i], R.id.grid_view, intent);

        final Intent onClickIntent = new Intent(context, FavoriteContactsWidgetProvider.class);

        onClickIntent.setAction(FavoriteContactsWidgetProvider.CLICK_ACTION);
        onClickIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetIds[i]);
        onClickIntent.setData(Uri.parse(onClickIntent.toUri(Intent.URI_INTENT_SCHEME)));

        final PendingIntent onClickPendingIntent = PendingIntent.getBroadcast(context, 0, onClickIntent, PendingIntent.FLAG_UPDATE_CURRENT);
        rv.setPendingIntentTemplate(R.id.image, onClickPendingIntent);

        appWidgetManager.updateAppWidget(appWidgetIds[i], rv);
    }
    super.onUpdate(context, appWidgetManager, appWidgetIds);
}

У кого-нибудь есть идеи, как это сделать?


person amfalmeida    schedule 12.05.2012    source источник
comment
Вы можете дать мне оба файла xml?   -  person Harshid    schedule 02.04.2013
comment
stackoverflow.com/questions/15038385/ может быть полезным.   -  person Harshid    schedule 02.04.2013


Ответы (2)


обратите внимание на эту строку:

 rv.setPendingIntentTemplate(R.id.image, onClickPendingIntent);

я думаю, вам следует заменить R.id.image на R.id.grid_view, потому что документы Google объяснили viewId как «идентификатор коллекции, чьи дочерние элементы будут использовать этот шаблон PendingIntent при нажатии» в методе setPendingIntentTemplate (int viewId , PendingIntent pendingIntentTemplate),

person Abner Niu    schedule 04.09.2013

Вам необходимо получить ожидающие передачи намерений в методе WidgetProvider onRecieve().

Также убедитесь, что у вас есть это широковещательное действие в качестве фильтра намерений в записи WidgetProvider (получателе) вашего манифеста Android.

person micwallace    schedule 02.04.2013