在app widget更新上替换RemoteViewsFactory

Yul*_*aya 4 android android-appwidget

我的app小部件可以在多种模式下运行.对于这些模式中的每一种,我创建了一个RemoteViewsFactory.要在模式之间切换,我向我发送一个意图AppWidgetProvider.一旦接收到它,我创建RemoteViews并把它传递到AppWidgetManagerupdateAppWidget().要设置RemoteViewsFactory集合视图,我调用RemoteViews' setRemoteAdapter():

rv.setRemoteAdapter(appWidgetId, R.id.widget_view_flipper, intent);
Run Code Online (Sandbox Code Playgroud)

R.id.widget_view_flipper是集合视图,intent用于RemoteViewsService构建适当的工厂.

编辑:我编辑了这个问题,因为我找出了最初描述的问题.现在,当我更换工厂时,getViewAt()新工厂的更改后会调用,但集合视图中的元素根本不会更新!怎么会发生这种情况?

现在我唯一想到的就是我可以在工厂更换后调用AppWidgetManager的notifyAppWidgetViewDataChanged,它会导致视图中的元素以丑陋的闪烁进行更新.

Yul*_*aya 11

经过半天的挖掘,我想出了一个解决方法.

当我需要更新窗口小部件并替换工厂时,请在AppWidgetProvider中执行以下操作:

appWidgetManager.updateAppWidget(appWidgetIds[i], null);
appWidgetManager.updateAppWidget(appWidgetIds[i], rv);  
Run Code Online (Sandbox Code Playgroud)

其中rv是新的RemoteViews.

旧的RemoteViews缓存在AppWidgetHostView中,这样我们就可以摆脱缓存的数据.

  • 非常简单的解决方案.谷歌应该把它当作一个错误. (3认同)