我有一个使用 ListView
的 appwidget。
我创建了一个扩展 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
方法只被调用一次。这会导致所有小部件显示相同的数据。
我该如何解决这个问题?
最佳答案
我自己还没有对此进行测试,但是查看 RemoteViewsService.onBind()
的源代码,我相信您不能仅仅改变 Intent 中的额外内容以使其检测到需要对 onGetViewFactory()
方法进行新调用,因为它使用 Intent.filterEquals()
方法进行比较:
Determine if two intents are the same for the purposes of intent resolution (filtering). That is, if their action, data, type, class, and categories are the same. This does not compare any extra data included in the intents.
我建议改为通过 Intent 的数据传递您需要的信息(小部件 ID?),可能是这样的:
private static void fillInList(RemoteViews widget, Context context, int appWidgetId) {
Intent intent = new Intent(context, AppWidgetService.class);
intent.setData(Uri.fromParts("content", String.valueOf(appWidgetId), null));
widget.setRemoteAdapter(R.id.appwidget_listview, intent);
}
分别在接收端:
public TreinVerkeerAppWidgetListFactory(Context context, Intent intent) {
this.context = context;
appWidgetId = Integer.valueOf(intent.getData().getSchemeSpecificPart());
System.out.println("New TVAPWLF for: " + appWidgetId);
trains = WidgetData.getInstance().widgetMap.get(appWidgetId);
}
关于android - onGetViewFactory 只为多个小部件调用一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11350287/