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

前端之家收集整理的这篇文章主要介绍了android – OnUpdate()不调用小部件服务前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我正在为我的应用程序开发一个小部件.窗口小部件名称是历史记录,当用户浏览任何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; i

第二课:

        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时,我之前提到的流程没有发生.

为什么不调用服务方法

或者任何其他方法数据库值更改时刷新列表视图

最佳答案
回答我的自我:

我们必须在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; i

猜你在找的Android相关文章