Подтвердить что ты не робот

Настройка фона AppWidget для одного виджета также влияет на других

Файл макета для моего виджета начинается с верхнего уровня с помощью:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="@dimen/widget_margin"
    android:id="@+id/widget"
    android:background="#20000000" >

Итак, исходный фон является полупрозрачным. Затем в какой-то момент во время выполнения я вызываю следующее, чтобы сделать фон полностью прозрачным:

remoteViews.setInt(R.id.widget, "setBackgroundColor", Color.parseColor("#00000000"));
appWidgetManager.updateAppWidget(appWidgetId, remoteViews);

В то время как это работает, я обнаружил, что при добавлении другого виджета фон для этого виджета начинается как полностью прозрачный, а не полупрозрачный в соответствии с макетом xml. Это как если бы настройка цвета фона для одного виджета изменила его для всех, включая новые виджеты, добавленные впоследствии.

Теперь это нечетно, потому что в то же время, что и выше, я также добавляю растровое изображение в виджет (через RemoteViews) с помощью:

remoteViews.setImageViewBitmap(R.id.imageView, bmp);

... и что растровое изображение не отображается во всех последующих виджетах, поэтому основной метод, который я использую, кажется, звучит.

Так почему же фон распространяется на другие виджеты?

EDIT добавить вывод appWidgetId в соответствии с запросом в комментарии:

В основном происходит от Intent, например. в onCreate() конфигурации Activity для виджета:

Intent intent = getIntent();
Bundle extras = intent.getExtras();
int appWidgetId = extras.getInt(AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID);
4b9b3361

Ответ 1

В классе AppWidgetProvider вы переопределяете метод onUpdate. Последним параметром является appWidgetIds, который является массивом активных идентификаторов виджетов. Скорее всего, вы реализовали изменение цвета фона, проходящего через этот массив для каждого widgetId. Чтобы определить пользовательский фон для каждого виджета, вам нужно будет реализовать логику сопоставления необходимого фона с конкретным виджетами и соблюдать эту логику внутри цикла.