Android AppWidget не будет обновляться от активности - PullRequest
9 голосов
/ 13 декабря 2010

У меня есть простой appwidget, и я хочу обновить его, когда в действии происходит действие (в том же приложении).в onUpdate () я немедленно обновляю виджет, который отлично работает.В своей деятельности я вызываю тот же метод статического обновления в моем appwidget, который вызывается в onUpdate () для обновления представлений.виджет не обновляется.

Я могу проследить код прямо в метод AppWidgetManager.updateAppWidget (), и все это хорошо, но виджет не обновляется.

Единственная возможная разница, которую яМожно видеть, что объект контекста, переданный в мой метод статического обновления, отличается, когда он вызывается из контекста действия в сравнении с контекстом метода onUpdate () appwidget.однако в Интернете есть множество примеров этого, поэтому я ожидаю, что это должно сработать.

Ответы [ 2 ]

20 голосов
/ 13 декабря 2010

Не видя вашего кода, я не уверен на 100%, как вы пытаетесь это сделать, однако вот метод, который я использую.В моем Activity у меня есть следующий метод:

private void updateAllWidgets(){
    AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(getApplicationContext());
    int[] appWidgetIds = appWidgetManager.getAppWidgetIds(new ComponentName(this, MyWidget.class));
    if (appWidgetIds.length > 0) {
        new MyWidget().onUpdate(this, appWidgetManager, appWidgetIds);
    }
}

Где MyWidget - класс appwidget.Я могу вызвать этот метод из любой точки моего Activity, чтобы обновить все мои приложения.

9 голосов
/ 13 декабря 2010

Вместо того, чтобы использовать статический метод, используйте тот факт, что виджет уже является получателем широковещательной рассылки, и зарегистрируйте для него намерение обновления в своем манифесте. Тогда всякий раз, когда вам нужно обновить его из активности, просто позвоните

//in your activity
sendBroadcast(new Intent(MyWidget.ACTION_UPDATE).putExtra(whatever));  



//In widget class
public static final String ACTION_UPDATE = "com.example.UPDATE_MY_WIDGET";

и внутри тегов получателя вашего файла манифеста

<intent-filter>
  <action android:name="com.example.UPDATE_MY_WIDGET"/>
</intent-filter>
...