【问题标题】:How do I force an update in a configuration activity?如何在配置活动中强制更新?
【发布时间】: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 能解决它

标签: android android-widget


【解决方案1】:

事实证明这是可行的:

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

【讨论】:

  • 尽管如此可怕,但我最终也这样做了。我保留了对我调用 onUpdate() 的 AppWidgetProvider 的静态引用。很遗憾,这是目前唯一的方法。
  • 我也遇到过这个问题。但是我们如何将配置值传递给AppWidgetProvider onUpdate method
  • @256 :您可以将信息保存在数据库中,也可以使用 SharedPreferences 使用 widgetId 来保持信息不同
  • 这对我有用。花了大约一天时间
猜你喜欢
  • 2016-03-12
  • 2021-06-06
  • 2020-10-30
  • 2021-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-31
相关资源
最近更新 更多