【发布时间】:2012-07-05 18:24:37
【问题描述】:
我有一个使用ListView 的应用程序小部件。
我创建了一个扩展 RemoteViewsService 的类:
public class AppWidgetService extends RemoteViewsService {
@Override
public RemoteViewsFactory onGetViewFactory(Intent intent) {
return (new AppWidgetListFactory(this.getApplicationContext(), intent));
}
}
在我的AppWidgetProvider 中,我为小部件的每个实例(对于每个appWidgetId)调用以下方法:
private static void fillInList(RemoteViews widget, Context context, int appWidgetId) {
Intent intent = new Intent(context, AppWidgetService.class);
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
widget.setRemoteAdapter(R.id.appwidget_listview, intent);
}
AppWidgetListFactory的构造函数
public AppWidgetListFactory(Context context, Intent intent) {
this.context = context;
appWidgetId = intent.getIntExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID);
System.out.println("New TVAPWLF for: " + appWidgetId);
trains = WidgetData.getInstance().widgetMap.get(appWidgetId);
}
现在的问题是,fillInList 方法的调用频率与小部件实例的调用频率一样,但 onGetViewFactory 方法只调用一次。这会导致所有小部件显示相同的数据。
我该如何解决这个问题?
【问题讨论】:
-
您能再添加一些代码吗?如果您将
fillInList方法设为非静态方法,它会起作用吗? -
就我而言,intent.putExtra 确实有效。每个实例我都会获得正确的必要小部件 ID。