首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >对于多个小部件,onGetViewFactory仅调用一次

对于多个小部件,onGetViewFactory仅调用一次
EN

Stack Overflow用户
提问于 2012-07-06 02:24:38
回答 1查看 3.7K关注 0票数 13

我有一个使用ListView的应用小部件。我已经创建了一个扩展RemoteViewsService的类

代码语言:javascript
复制
public class AppWidgetService extends RemoteViewsService {
    @Override
    public RemoteViewsFactory onGetViewFactory(Intent intent) {
        return (new AppWidgetListFactory(this.getApplicationContext(), intent));
    }
}

在我的AppWidgetProvider中,我为小部件的每个实例(对于每个appWidgetId)调用以下方法:

代码语言:javascript
复制
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的构造函数

代码语言:javascript
复制
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方法只被调用一次。这会导致所有小部件显示相同的数据。

我该如何解决这个问题呢?

EN

回答 1

Stack Overflow用户

发布于 2018-07-16 04:29:26

基于上面的描述,如果你设置的是intent extra而不是string,你可以做的另一个技巧是:

代码语言:javascript
复制
Random random = new Random();
intent.setType(String.valueOf(random.nextInt(1000)));

这将调用onGetViewFactory();

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11350287

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档