Android 挂件

Android 挂件,android,widget,android-pendingintent,Android,Widget,Android Pendingintent,我正在开发一个用于显示联系人的Android小部件,但当我单击联系人图像时,我无法创建eventClick 例如,我使用StackRemoteViewsFactory,将联系人添加到我的GridView 这是我的密码: public RemoteViews getViewAt(int position) { Bitmap photo = loadContactPhoto(mContext.getContentResolver(), mWidgetItems.get(position).

我正在开发一个用于显示联系人的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);
}
公共远程视图getViewAt(内部位置){ 位图照片=loadContactPhoto(mContext.getContentResolver(),mWidgetItems.get(position.id); RemoteViews rv=新远程视图(mContext.getPackageName(),R.layout.contact_项); rv.setTextViewText(R.id.name,mWidgetItems.get(position.name); 如果(照片!=null){ rv.setImageViewBitmap(R.id.图像,照片); } 最终意图fillInIntent=新意图(); 最终捆绑附加=新捆绑(); extras.putLong(FavoriteContactsWidgetProvider.CONTACT_ID,mWidgetItems.get(position.ID)); 输入内容。额外输入(额外输入); rv.设置点击填充内容(R.id.联系框架,填充内容); 返回rv; } 公共void onUpdate(上下文上下文,AppWidgetManager AppWidgetManager,int[]AppWidgetId){ 对于(int i=0;i
有人有办法让这一切顺利吗

您需要在WidgetProvider onRecieve()方法中接收挂起的意图广播


还要确保在android清单的WidgetProvider条目(接收者)中将该广播操作作为意图过滤器。请注意这一行:

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

我认为你应该将R.id.image替换为R.id.grid_view,因为谷歌的文档已经在方法setPendingEntTemplate(int-viewId,PendingEnt-PendingEntTemplate)中将viewId解释为“点击时谁的孩子将使用此PendingEntent模板的集合id”。

你能给我你的两个xml文件吗?可能会有帮助。