我正在编写一个配置活动的小部件,在单击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
。)我最终在屏幕上显示了一个小部件,该小部件具有我的默认操作的结果,但从未得到更新。
如果我在没有配置活动的情况下设置窗口小部件,它会在创建时更新,一切都按预期工作(只是没有配置的位)。
我是否遗漏了强制更新的方式?
谢谢!
答案 0 :(得分:9)
结果证明有效:
new MyWidgetProviderClass()
.onUpdate(this,
AppWidgetManager.getInstance(this),
new int[] { widget_id }
);