我最近开始用 Java 开发小部件,但在使用和管理多个小部件时,我并不完全确定一般概念。我正在使用 AppWidgetProvider 来更新小部件 UI 并注册点击监听器。我希望 onUpdate() 方法具有所有 appWidgetIds 或需要更新的小部件的 appWidgetIds。但是截至目前,我将始终获得最近最少创建的小部件的 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);
}
翻翻过去那场雪
相关分类