代码之家  ›  专栏  ›  技术社区  ›  Blrfl

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

  •  5
  • Blrfl  · 技术社区  · 14 年前

    我正在编写一个带有配置活动的小部件,当其 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() .

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

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

    这个方法一直到 finish() 配置活动消失了,但是没有调用 更新() onReceive() 在这一点之后。(小部件本身没有 updatePeriodMillis )我最终在屏幕上看到一个小部件,它有我默认操作的结果,但从未更新。

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

    我在强制更新的过程中是否遗漏了什么?

    谢谢!

    1 回复  |  直到 14 年前
        1
  •  10
  •   Blrfl    14 年前

    结果证明这是可行的:

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