我正在编写一个带有配置活动的小部件,当单击其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逐字逐句.tidget_id保存在活动的onCreate()期间挖出的小部件ID.
当我在主屏幕上放置小部件的实例时,我已经验证我得到了预期的事件序列:
> onReceive()获取ACTION_APPWIDGET_ENABLED,如果它是第一个.
> onUpdate()被调用(我在其中检测到未配置窗口小部件并将某些内容绘制为默认操作).
>出现配置活动.
>当我按OK时,上面的ok()方法被调用.
该方法一直到finish()并且配置活动消失,但在此之后没有调用onUpdate()或onReceive(). (小部件本身没有updatePeriodMillis.)我最终在屏幕上显示了一个小部件,该小部件具有我的默认操作的结果但从未得到更新.
如果我在没有配置活动的情况下设置窗口小部件,它会在创建时更新,并且一切都按预期工作(只是没有配置的位).
我在强制更新的方式中遗漏了什么吗?
谢谢!
解决方法
结果证明有效:
new MyWidgetProviderClass() .onUpdate(this,AppWidgetManager.getInstance(this),new int[] { widget_id } );