Вызов метода onUpdate виджета из основной активности приложения - PullRequest
1 голос
/ 09 февраля 2011

Я работаю над приложением Android, которое включает в себя виджет. Основной интерфейс приложения - это простое задание, но некоторые действия, которые пользователи могут выполнять в этом задании, заставляют обновлять виджет, т. Е. Запускать метод onUpdate.

Как я могу вызвать этот метод из упражнения? Глядя на другие вопросы , я смог написать код, который меняет свой макет, но, похоже, он не запускается при обновлении (так как у меня остался пустой макет и ни один из данных, которые добавляются во время onUpdate).

Любые идеи или примеры кода очень ценятся!

1 Ответ

9 голосов
/ 26 апреля 2011

Я все еще довольно новичок в Android, но я выполнил это за три шага:

Сначала я поместил содержимое моего AppWidgetProvider.onUpdate в метод (myUpdate(Context)).

Во-вторых, я переопределил AppWidgetProvider.onReceive (), чтобы он выглядел примерно так:

public void onReceive(final Context context, final Intent intent)
{
    super.onReceive(context, intent);

    if (MY_PUBLIC_STATIC_STRING.equals(intent.getAction()))
    {
        myUpdate(context);
    }
}

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

Intent updateWidgetIntent = new Intent(context, MyWidget.class);
updateWidgetIntent.setAction(MyWidget.MY_PUBLIC_STATIC_STRING);
context.sendBroadcast(updateWidgetIntent);

Недостатком является то, что вам нужно самостоятельно найти AppWidgetManager из контекста и идентификаторов виджетов приложения, а не из-за приятного интерфейса, который дает вам OnUpdate.Поэтому я скептически отношусь к тому, что это правильный подход.Желаем удачи.

myUpdate (Context) начинается так:

AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
int[] appWidgetIds =
    appWidgetManager.getAppWidgetIds(new ComponentName(context, this.getClass()));
...