在RemoteViewsService中注册DataSetObserver并手动调用onDataSetChanged()方法。
代码示例:
public class MyWidgetRemoteViewsService extends RemoteViewsService {
@Override
public RemoteViewsFactory onGetViewFactory(Intent intent) {
return new MyWidgetRemoteViewsFactory(this.getApplicationContext(), intent);
}
}
public class MyWidgetRemoteViewsFactory implements RemoteViewsService.RemoteViewsFactory {
private Context mContext;
private List mDataList;
private DataSetObserver mDataSetObserver = new DataSetObserver() {
@Override
public void onChanged() {
super.onChanged();
// 数据集发生变化时,手动调用onDataSetChanged()方法
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
MyWidgetRemoteViewsService.this.onDataSetChanged();
}
}
};
public MyWidgetRemoteViewsFactory(Context context, Intent intent) {
mContext = context;
mDataList = new ArrayList<>();
// 注册DataSetObserver
mDataList.registerDataSetObserver(mDataSetObserver);
}
// ... 省略其他方法 ...
}
public class MyWidgetProvider extends AppWidgetProvider {
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
super.onUpdate(context, appWidgetManager, appWidgetIds);
for (int appWidgetId : appWidgetIds) {
RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.widget_layout);
// 设置ListView的adapter
remoteViews.setRemoteAdapter(R.id.list_view, new Intent(context, MyWidgetRemoteViewsService.class));
// 更新ListView的内容
appWidgetManager.notifyAppWidgetViewDataChanged(appWidgetId, R.id.list_view);
// 更新widget视图
appWidgetManager.updateAppWidget(appWidgetId, remoteViews);
}
}
}