在方法
的数组 appWidgetIds 中执行idpublic void onUpdate(Context context,AppWidgetManager appWidgetManager,int [] appWidgetIds){
都属于我的应用程序?
如果是这样,那么在我的机器人的必杀技中有一些appwidgets,因为如果我删除所有的appwidgets仍然会在数组中保留一些ID,这些ID在我的主屏幕上没有显示。 : - (
有没有办法删除所有小部件?
答案 0 :(得分:2)
你的app小部件可以有多个小部件用于同一个应用程序,比如一个小部件显示位置,一个小部件显示股票,一个小部件显示等等等等, 在这种情况下,可以为每个小部件分配一个名为appWidgetID
的ID答案 1 :(得分:1)
我解决了问题:我卸载了,然后重新安装了我的应用程序,之后所有 ghost小部件都消失了。
总之: appWidgetIds中的所有ID都是我应用的ID 。
答案 2 :(得分:1)
Weeelp,八年后我回到了Android开发领域(很惊讶地发现我已经对此问题发表了评论),现在我有了一个真正的答案。在最初发布此问题之后,似乎似乎才变得更加知名,但基本上:Android中存在一个错误,该错误几乎永远都没有得到解决。
所有这些幻象ID是您从某个时候开始创建的小部件的appWidgetId,但在小部件配置活动中被错误地取消了。
在developer documentation上,它包含以下代码示例,用于确认小部件的创建:
Intent resultValue = new Intent();
resultValue.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, mAppWidgetId);
setResult(RESULT_OK, resultValue);
finish();
请仔细阅读其下方的提示:
提示:首次打开配置活动时,将活动结果以及EXTRA_APPWIDGET_ID设置为RESULT_CANCELED,如上面的第5步所示。这样,如果用户在结束之前退出活动,则将通知App Widget主机已取消配置,并且不会添加App Widget。
虽然Android接受setResult(RESULT_CANCEL);
(并且许多教程都使用它,而且我相信即使是官方文档也曾经有这样的示例代码),但这是错误的。无需传递新的ID,它就作为那些神秘的幻象ID之一保留在系统中。
取消创建窗口小部件的正确方法是setResult(RESULT_CANCEL, resultValue);