在小部件的RemoteViews中,不能使用findViewById()方法来获取GridView的引用,而需要使用setPendingIntentTemplate()方法来设置GridView的模板,并在PendingIntent中传递该模板的ID,然后通过GridView的ID来获取GridView的引用。
示例代码如下所示:
// 在小部件的RemoteViews中设置GridView的模板 remoteViews.setPendingIntentTemplate(R.id.grid_view, pendingIntent);
// 在PendingIntent中传递GridView的模板的ID Intent intent = new Intent(context, MyWidget.class); intent.setAction(MyWidget.ACTION_OPEN_GRID_ITEM); intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId); intent.setData(Uri.parse(intent.toUri(Intent.URI_INTENT_SCHEME)));
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); remoteViews.setPendingIntentTemplate(R.id.grid_view, pendingIntent);
// 在小部件中获取GridView的引用 RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.my_widget_layout); GridView gridView = (GridView) views.apply(context, parent);
注意:需要在小部件的XML布局文件中,将GridView组件的android:widgetPendingIntent属性设置为“@android:id/empty”。