android–OnUpdate()不调用小部件服务

android–OnUpdate()不调用小部件服务,第1张

概述我正在为我的应用程序开发一个小部件.窗口小部件名称是历史记录,当用户浏览任何URL时,我将其存储在本地数据库中,从中列出该窗口小部件.当我打开小部件时,它从本地数据库中获取所有细节并在小部件的列表视图中显示它.1)当我打开小部件时,首先调用WidgetProvider的onUpdate方法2)然后onUpdate()将调用服务WidgetService3)然

我正在为我的应用程序开发一个小部件.窗口小部件名称是历史记录,当用户浏览任何URL时,我将其存储在本地数据库中,从中列出该窗口小部件.

当我打开小部件时,它从本地数据库中获取所有细节并在小部件的列表视图中显示它.

1)当我打开小部件时,首先调用WidgetProvIDer的onUpdate方法

2)然后onUpdate()将调用服务WidgetService

3)然后服务将调用Widget Factory使用本地存储的db更新列表视图.

在小部件工厂中,它将获取db值并更新小部件中的lisvIEws.

以上是设置窗口小部件时发生的过程.

第一堂课:

        public class WidgetProvIDerFavorite extends appwidgetprovider {        @SuppressWarnings("deprecation")        @OverrIDe          public voID onUpdate(Context ctxt,AppWidgetManager appWidgetManager,int[] appWidgetIDs) {                        for (int i=0; iWidgetIDs.length; i++) {              Intent svcIntent=new Intent(ctxt,WidgetServiceFavorite.class);              svcIntent.putExtra(AppWidgetManager.EXTRA_APPWidget_ID,appWidgetIDs[i]);              svcIntent.setData(Uri.parse(svcIntent.toUri(Intent.URI_INTENT_SCHEME)));                RemoteVIEws Widget=new RemoteVIEws(ctxt.getPackagename(),R.layout.Widget_favorite);              Widget.setRemoteAdapter(appWidgetIDs[i],R.ID.ListFavoriteLogin,svcIntent);                                                Intent clickIntent=new Intent(ctxt,WidgetActivityFavorite.class);                                               PendingIntent clickPI=PendingIntent.getActivity(ctxt,clickIntent,PendingIntent.FLAG_UPDATE_CURRENT);              Widget.setPendingIntentTemplate(R.ID.ListFavoriteLogin,clickPI);                                                            appWidgetManager.updateAppWidget(appWidgetIDs[i],Widget);            }            super.onUpdate(ctxt,appWidgetManager,appWidgetIDs);          } 

第二课:

        public class WidgetServiceFavorite extends RemoteVIEwsService {          @OverrIDe          public RemoteVIEwsFactory onGetVIEwFactory(Intent intent) {            return(new WidgetFactoryFavorite(this.getApplicationContext(),intent));                   }        }

第三类:将获取并更新列表视图.

在construtor中获取并getVIEwAt()(它自动调用)将设置值.

        public class WidgetFactoryFavorite extends Activity implements RemoteVIEwsService.RemoteVIEwsFactory {          public WidgetFactoryFavorite(Context ctxt,Intent intent) {              int array_Index=0;              int array_Length=0;              WidgetDatabase db1=new WidgetDatabase(ctxt);              List

我的问题是:

当我在浏览器中浏览某些URL时,它不能并排同步.我在新数据库更新数据库时使用了以下代码同步.

        int[] IDs = AppWidgetManager.getInstance(mActivity).getAppWidgetIDs(new Componentname(mActivity,WidgetProvIDerFavorite.class));        WidgetProvIDerFavorite myWidget = new WidgetProvIDerFavorite();        myWidget.onUpdate(mActivity,AppWidgetManager.getInstance(mActivity),IDs);

它调用onUpdate方法().但onUpdate不会调用将调用工厂类并使用新数据库值提升lisvIEw的服务类.当我将新值添加到db时,我之前提到的流程没有发生.

为什么不调用服务方法?

或者任何其他方法在数据库值更改时@R_685_6419@视图

最佳答案回答我的自我:

我们必须在onUpdateMethod()中调用notifyAppWidgetVIEwDataChanged().

   appWidgetManager.notifyAppWidgetVIEwDataChanged(appWidgetIDs[i],R.ID.ListVIEw);

完成OnUpdate():

    public class WidgetProvIDerFavorite extends appwidgetprovider {    @SuppressWarnings("deprecation")    @OverrIDe      public voID onUpdate(Context ctxt,int[] appWidgetIDs) {                    for (int i=0; iWidgetIDs.length; i++) {          Intent svcIntent=new Intent(ctxt,WidgetServiceFavorite.class);          svcIntent.putExtra(AppWidgetManager.EXTRA_APPWidget_ID,appWidgetIDs[i]);          svcIntent.setData(Uri.parse(svcIntent.toUri(Intent.URI_INTENT_SCHEME)));            RemoteVIEws Widget=new RemoteVIEws(ctxt.getPackagename(),R.layout.Widget_favorite);          Widget.setRemoteAdapter(appWidgetIDs[i],svcIntent);                                            Intent clickIntent=new Intent(ctxt,WidgetActivityFavorite.class);                                           PendingIntent clickPI=PendingIntent.getActivity(ctxt,PendingIntent.FLAG_UPDATE_CURRENT);          Widget.setPendingIntentTemplate(R.ID.ListFavoriteLogin,clickPI);           appWidgetManager.notifyAppWidgetVIEwDataChanged(appWidgetIDs[i],R.ID.ListVIEw);                          appWidgetManager.updateAppWidget(appWidgetIDs[i],Widget);        }        super.onUpdate(ctxt,appWidgetIDs);      } 
总结

以上是内存溢出为你收集整理的android – OnUpdate()不调用小部件服务全部内容,希望文章能够帮你解决android – OnUpdate()不调用小部件服务所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1139471.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-31
下一篇2022-05-31

发表评论

登录后才能评论

评论列表(0条)