
我正在为我的应用程序开发一个小部件.窗口小部件名称是历史记录,当用户浏览任何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()不调用小部件服务所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)