Как в java работает обновление и управление несколькими виджетами на главном экране?

Недавно я начал разрабатывать виджеты на 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);
}

person Groudonx    schedule 19.08.2019    source источник


Ответы (1)


Я думаю, что ответ на большую часть проблемы был дан здесь: http://www.bogdanirimia.ro/android-widget-click-event-multiple-instances/269/comment-page-1

person Groudonx    schedule 20.08.2019