Недавно я начал разрабатывать виджеты на java, и я не совсем уверен в общей концепции, когда дело доходит до использования и управления несколькими виджетами. Я использую AppWidgetProvider для обновления пользовательского интерфейса виджета и для регистрации прослушивателя кликов. Я ожидал бы, что метод onUpdate () будет иметь либо все appWidgetIds, либо appWidgetIds виджетов, которые необходимо обновить. Однако на данный момент я всегда буду получать идентификатор виджета, который я создавал не так давно, независимо от того, какой из них был нажат. Один раз я получил все идентификаторы виджетов, которые были созданы до сих пор, но это изменилось после того, как я разместил еще один. Та же проблема, похоже, присутствует с кодом getIntArrayExtra ();
В конце концов, я хочу иметь несколько виджетов, которые отображают отдельные данные и обновляются либо сами по себе, либо все сразу, когда я нажимаю на один из них. Мне еще предстоит найти способ привязать отдельные данные к одному виджету и получить сам виджет (поскольку он не отображается в идентификаторах после размещения другого).
Было бы очень полезно, если бы вы могли добавить некоторую поясняющую справочную информацию или указать на некоторые проблемы в приведенном ниже коде, спасибо!
открытый класс Slideshow расширяет 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 расширяет Service {
@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);
}