nha*_*man 13 android android-appwidget
我有一个使用的appwidget ListView
.我创建了一个扩展的类RemoteViewsService
:
public class AppWidgetService extends RemoteViewsService {
@Override
public RemoteViewsFactory onGetViewFactory(Intent intent) {
return (new AppWidgetListFactory(this.getApplicationContext(), intent));
}
}
Run Code Online (Sandbox Code Playgroud)
在我的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);
}
Run Code Online (Sandbox Code Playgroud)
的构造函数 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);
}
Run Code Online (Sandbox Code Playgroud)
现在问题是,该fillInList
方法被调用的方式与小部件的实例一样频繁,但该onGetViewFactory
方法只被调用一次.这导致所有小部件显示相同的数据.
我怎样才能解决这个问题?
Joe*_*Joe 31
我自己没有测试过这个,但是看一下源代码RemoteViewsService.onBind()
,我相信你不能只改变你的Intent中的额外内容,以便它检测到onGetViewFactory()
需要对你的方法进行新的调用,因为它使用了Intent.filterEquals()
方法比较:
为了意图解析(过滤)的目的,确定两个意图是否相同.也就是说,如果他们的行为,数据,类型,类别和类别是相同的.这不会比较意图中包含的任何额外数据.
我建议通过Intent的数据传递你需要的信息(widget 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);
}
Run Code Online (Sandbox Code Playgroud)
并分别在接收方:
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);
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3189 次 |
最近记录: |