java 如何更新和管理多个主屏幕小部件?

How does updating and managing multiple homescreen widgets work in java?

我最近开始在 java 中开发小部件,但在使用和管理多个小部件时,我并不完全了解一般概念。 我正在使用 AppWidgetProvider 来更新小部件 UI 并注册点击监听器。 我希望 onUpdate() 方法具有所有 appWidgetIds 或需要更新的小部件的 appWidgetIds。 但是截至目前,我将始终获得最近最少创建的小部件的 ID,无论单击哪个小部件。有一次我收到了到目前为止已创建的所有 widgetId,但在我放置另一个 widgetId 后发生了变化。 代码 getIntArrayExtra();

似乎也存在同样的问题

最后,我想要多个小部件来显示单个数据,并在我单击其中一个时自行更新或同时更新所有小部件。我还没有找到将单个数据绑定到单个小部件并获取小部件本身的方法(因为在放置另一个小部件后它不会显示在 ID 中)。

如果您能在下面的代码中添加一些解释性背景信息或指出一些问题,将非常有帮助,谢谢!

public class 幻灯片扩展了 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);
}

public class 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