【发布时间】:2010-09-29 03:34:48
【问题描述】:
我正在编写一个带有配置活动的小部件,当点击它的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。)我最终在屏幕上看到了一个小部件,它具有我的默认操作的结果,但从未更新。
如果我在没有配置活动的情况下设置小部件,它会在创建时更新,并且一切都按预期工作(只是没有配置的位)。
我在强制更新的过程中是否遗漏了什么?
谢谢!
【问题讨论】:
-
这是 android 中的一个已知错误:只有在您从配置活动返回后才应调用 onUpdate。我有完全一样的问题。希望 3.2 能解决它