Как обновить пользовательский интерфейс для Android appwidget


Я уверен, что чего-то не хватает, но я просто пытаюсь получить виджет приложения с кнопкой и счетчиком. Каждый раз, когда я нажимаю кнопку, Я хочу, чтобы счетчик обновлялся на 1.

Я установил функцию onUpdate () WidgetProvider для регистрации ожидающего события на кнопку, чтобы она запускала службу для вызова счетчика numbver:

Intent active = new Intent(context, CounterService.class);
active.setAction(CounterService.COUNT);
PendingIntent pending = PendingIntent.getService(context, 0, active, PendingIntent.FLAG_UPDATE_CURRENT);
views.setOnClickPendingIntent(R.id.CountButton, pending);

ComponentName component = new ComponentName(context.getPackageName(), KickCounterWidgetProvider.class.getName());    
appWidgetManager.updateAppWidget(component, views);

Затем в функции services CounterService::onStart() я увеличиваю количество (сохраненное в префиксах на данный момент) , а затем пытаюсь обновить текстовое поле это показывает текущее значение счета:

// ... bump the count here and store a string representation of it in currentCountString ...

RemoteViews remoteView = new RemoteViews(getApplicationContext().getPackageName(), R.layout.widget);

remoteView.setTextViewText(R.id.CurrentKickCount, currentCountString);

// apply changes to widget
AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(getApplicationContext());
ComponentName component = new ComponentName(getApplicationContext().getPackageName(), KickCounterWidgetProvider.class.getName());    
appWidgetManager.updateAppWidget(component, remoteView);

Разумное использование Logcat указывает, что все это работает нормально, и строка, кажется, в порядке, но по какой-то причине вызов appWidgetManager.updateAppWidget () по какой-то причине молча выходит из строя.

Я не знаю, связано ли это вообще, но в первый раз, когда я добавляю экземпляр виджета на рабочий стол, даже кнопка не работает (т. е. вызов updateAppWidget() в onUpdate() в провайдере не работает). Последующие экземпляры виджет, кажется, работает нормально для вызова updateAppWidget () в провайдере, но никогда не работает для службы.

Любая помощь будет весьма признательна.
2 2

2 ответа:

От: http://code.google.com/p/android/issues/detail?id=8889

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

При перезапуске AVD (с помощью или без установленного пакета виджета на устройстве) проблема перестает быть существовать после первый несвежий инициализации загрузки.

Проблема, похоже, существует на 2.0 и 2.1, на 1.5, 1.6 и 2.2 он ведет себя так, как и ожидалось.

Ваш общий подход кажется здравым, хотя this, вероятно, работает так же, как getApplicationContext() здесь. Однако ваш последний полный абзац предполагает, что что-то еще может быть не так. Вот несколько сложный пример проекта , который демонстрирует тип шаблона, который вы используете-в данном случае, случайно выбирая ресторан, а не натыкаясь на прилавок.