如何在配置活动中强制更新?

时间:2010-09-29 03:34:49

标签: android android-widget

我正在编写一个配置活动的小部件,在单击OK按钮时调用以下方法:

private void ok()
{
    // ...Do Widget Configuration...

    // Force an update
    Context context = getApplicationContext();
    RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget);
    AppWidgetManager.getInstance(context).updateAppWidget(widget_id, views);

    // Return the expected result
    Intent result = new Intent();
    result.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, widget_id);
    setResult(RESULT_OK, result);

    finish();
}

这几乎是the documentation的逐字逐句。 widget_id保存在活动onCreate()期间挖出的小部件ID。

当我在主屏幕上放置小部件的实例时,我已经确认我得到了预期的事件序列:

  • onReceive()如果是第一个,则会获得ACTION_APPWIDGET_ENABLED
  • onUpdate()被调用(我在其中检测到未配置窗口小部件并将某些内容绘制为默认操作)。
  • 将显示配置活动。
  • 当我按OK时,会调用上面的ok()方法。

该方法一直到finish(),配置活动就消失了,但在此之后没有调用onUpdate()onReceive()。 (小部件本身没有updatePeriodMillis。)我最终在屏幕上显示了一个小部件,该小部件具有我的默认操作的结果,但从未得到更新。

如果我在没有配置活动的情况下设置窗口小部件,它会在创建时更新,一切都按预期工作(只是没有配置的位)。

我是否遗漏了强制更新的方式?

谢谢!

1 个答案:

答案 0 :(得分:9)

结果证明有效:

new MyWidgetProviderClass()
  .onUpdate(this,
            AppWidgetManager.getInstance(this),
            new int[] { widget_id }
   );