2013-04-10 3 views
0

Я просто хочу обновить свой виджет, когда он будет изменен в Jelly Bean.appWidgetManager.updateAppWidget не имеет эффекта

Поэтому я использую этот код:

@TargetApi(Build.VERSION_CODES.JELLY_BEAN) 
@Override 
public void onAppWidgetOptionsChanged(Context context, 
     AppWidgetManager appWidgetManager, int appWidgetId, 
     Bundle newOptions) { 
    Log.d("DEBUG_TAG", "I want to update Widget: "+appWidgetId); 
    appWidgetManager.updateAppWidget(appWidgetId, 
      getRemoteViews(context, minWidth, minHeight)); 
    Log.d("DEBUG_TAG", "Widget "+appWidgetId+"should have been updated"); 
    super.onAppWidgetOptionsChanged(context, appWidgetManager, appWidgetId, 
      newOptions); 
} 

К сожалению, ничего не произойдет.

My logcat clealy говорит, что виджет должен быть обновлен, как и ожидалось, но onUpdate никогда не вызывается!

public void onUpdate(Context context, AppWidgetManager appWidgetManager, 
     int[] appWidgetIds) { 

    final int N = appWidgetIds.length; 
    Log.i("", "***Update "+N+" Widget*** "); 
    for (int i = 0; i < N; i++) { 
     int appWidgetId = appWidgetIds[i]; 
     Log.i("", "***Widget*** "+appWidgetId); 

Но ничего не происходит.

Я проверил, что, когда я создаю мой виджет идентификатор правильно (идентификатор 29 в моем случае) 29 показан в журнале, когда onAppWidgetOptionsChanged называется 29 показан в журнале, когда виджет создан

Большое спасибо за любую помощь.

+0

«К сожалению, ничего не происходит» - что делает 'getRemoteViews()' do? «Мой логарифмический clealy говорит, что виджет должен обновляться, как и ожидалось, но onUpdate никогда не вызывается!» - 'onUpdate()' не вызывается в ответ на событие изменения размера или вызов 'updateAppWidget()'. Вот пример проекта, показывающий обновление содержимого виджета приложения на основе события изменения размера: https://github.com/commonsguy/cw-omnibus/tree/master/AppWidget/Resize – CommonsWare

+0

Вы просто говорите мне, что onUpdate() не является вызывается в updateAppWidget() ... Не кажется мне настолько очевидным для меня .... –

+0

«Вы просто говорите мне, что onUpdate() не вызывается в updateAppWidget()» - почему это так? 'onUpdate()' * вызывает * 'updateAppWidget()'. Вам нравится бесконечная рекурсия? – CommonsWare

ответ

0

Что касается ответа Commonsware, я могу сделать что-то неправильно, но мне нужно вызвать onUpdate вручную в методе onAppWidgetOptionsChanged.

updateAppWidget не имеет абсолютно никакого эффекта (я дважды проверил идентификатор виджета и RemoteView)

Я был бы рад услышать лучшее решение, но это единственный способ, которым я могу сделать обновить виджет!

int[] ids = {appWidgetId}; 
    onUpdate(context, AppWidgetManager.getInstance(context), ids); 
Смежные вопросы