我最近开始用java开发小部件,在使用和管理多个小部件时,我不完全确定一般概念。 我正在使用AppWidgetProvider来更新小部件UI并注册点击侦听器。 我希望 onUpdate(( 方法具有所有 appWidgetId 或需要更新的小部件的 appWidgetId。 但是,截至目前,无论单击哪个小部件,我都将始终获得我最近最少创建的小部件的 ID。有一次,我收到了到目前为止创建的所有 widgetId,但在我放置另一个 widgetId 后发生了变化。 代码getIntArrayExtra((似乎也存在同样的问题;
最后,我希望有多个小部件来显示单个数据,并在我单击其中一个时自行更新或一次更新。我还没有找到一种方法将单个数据绑定到单个小部件并获取小部件本身(因为它在放置另一个小部件后不会显示在 id 中(。
如果您可以添加一些解释背景信息或在下面的代码中指出一些问题,那将非常有帮助,谢谢!
公共类幻灯片扩展 AppWidgetProvider {
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
Intent intent = new Intent(context, UpdateSlideshowService.class);
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, appWidgetIds);
context.startService(intent);
}
公共类 UpdateSlideshowService 扩展服务 {
@Override
public void onStart(Intent intent, int startId) {
AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(this.getApplicationContext());
int[] allWidgetIds = intent.getIntArrayExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS);
for (int widgetId : allWidgetIds) {
int number = (new Random().nextInt(100));
Intent clickIntent = new Intent(this.getApplicationContext(), Slideshow.class);
clickIntent.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE);
clickIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, allWidgetIds);
PendingIntent pendingIntent = PendingIntent.getBroadcast(getApplicationContext(), 0, clickIntent,
PendingIntent.FLAG_UPDATE_CURRENT);
RemoteViews remoteViews = new RemoteViews(this.getApplicationContext().getPackageName(),
R.layout.slideshow);
remoteViews.setTextViewText(R.id.update, "Random: " + number);
remoteViews.setOnClickPendingIntent(R.id.update, pendingIntent);
appWidgetManager.updateAppWidget(widgetId, remoteViews);
}
stopSelf();
super.onStart(intent, startId);
}
我认为这里已经解决了大部分问题: http://www.bogdanirimia.ro/android-widget-click-event-multiple-instances/269/comment-page-1