我正在开发一个用于显示联系人的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);
}
任何人都有一些想法让这项工作成功吗?
答案 0 :(得分:2)
注意这一行:
rv.setPendingIntentTemplate(R.id.image, onClickPendingIntent);
我认为你应该将R.id.image替换为R.id.grid_view,因为Google的文档已经将viewId解释为“在点击时使用此PendingIntent模板的集合的ID”setPendingIntentTemplate方法(int viewId,PendingIntent pendingIntentTemplate),
答案 1 :(得分:0)
您需要在WidgetProvider onRecieve()方法中接收广播的待处理意图。
另外,请确保将您的广播操作作为Android清单的WidgetProvider条目(接收方)中的intent-filter。