我有一个简单的主屏幕小部件,它显示了一个项目列表。由于我想支持旧设备,而不是ListView,我使用了一系列“模拟”ListView的TextView对象。
它工作得很好,但我想为这些项目分配一个点击监听器。在听众中,我想区分它们,并根据项目的内容采取行动。
怎么做?由于setOnClickPendingIntent
获取视图的ID,因此我无法为单个项目分配单独的意图 - 它们都共享相同的ID,因此处理程序将不知道触发了哪个项目。我只能从XML布局实例化RemoteViews,所以我不能添加具有不同ID的项目(我需要创建大量的布局文件,只有布局ID不同)。
由于Honeycomb有setOnClickFillInIntent
方法以可接受的方式处理我的问题,但如果我希望我的小部件可以在Gingerbread上工作,我就无法使用它。
答案 0 :(得分:1)
我不能为单个项目分配单独的意图 - 它们都共享相同的ID,因此处理程序不会知道哪个项目被点击。
您的小部件必须具有唯一ID。
我只能从XML布局实例化RemoteViews,所以我不能添加具有不同ID的项目
当然可以。每个应用小部件大小有一个布局文件(因此,如果您只支持一个大小,则可能只有一个布局文件周期)。在该布局文件中,您可以为小部件提供唯一的ID。
答案 1 :(得分:0)
你或许可以!我有同样的问题,但后来我意识到我一次生成一行(布局中的各行,同一模板中的每一行)。每一行都是它自己的RemoteViews,所以在for循环中,我设置了自己的意图。例如,如果我将新的innerRemoteViews添加到outerRemoteViews,我会调用:
innerRemoteViews.setOnClickPendingIntent(R.id.inner_row_template_id, PendingIntent.getActivity(context, 0, intent, 0));
这样,Intent就会被添加到innerRemoteViews中,其中id仍然特定于该行。