Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/231.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何在配置活动中强制更新?_Android_Android Widget - Fatal编程技术网

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

Android 如何在配置活动中强制更新?,android,android-widget,Android,Android Widget,我正在编写一个带有配置活动的小部件,当单击其OK按钮时,该小部件将调用以下方法: private void ok() { // ...Do Widget Configuration... // Force an update Context context = getApplicationContext(); RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget

我正在编写一个带有配置活动的小部件,当单击其
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();
}
这几乎是一字不差的
widget_id
保存在活动的
onCreate()
过程中挖掘的widget id

当我将小部件的实例放在主屏幕上时,我已验证是否获得了预期的事件序列:

  • onReceive()
    获取启用的
    操作
  • 调用
    onUpdate()
    (在其中,我检测到小部件未配置,并将某些内容作为默认操作绘制)
  • 此时将显示配置活动
  • 当我按下
    OK
    时,就会调用上面的
    OK()
    方法
该方法一直执行到
finish()
,配置活动消失,但在这一点之后没有调用
onUpdate()
onReceive()
。(小部件本身没有
updatePeriodMillis
)我在屏幕上看到一个小部件,它有我默认操作的结果,但从未更新过

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

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


谢谢

结果证明这是可行的:

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

这是android中的一个已知错误:onUpdate应该只在您从配置活动返回后调用。我也有同样的问题。希望3.2能解决这个问题,虽然这很可怕,但我最终还是这么做了。我保留了对AppWidgetProvider的静态引用,在该引用上调用onUpdate()。很遗憾,这是目前唯一的办法。我也面临着这个问题。但是,我们如何将配置值传递给更新方法上的AppWidgetProvider呢?@256:您可以将信息保存在数据库中,也可以使用widgetId使用SharedReferences来保持信息的差异,这对我来说是有效的。花了大约一天的时间